c语言如何输入任意长度的字符串数组

比如说我在linux里打这样的command
printf '\0Gur\n\0Dhvpx\n\0Oebja\n\0sbk\n\twhzcf\n\tbire\n\tgur\n\tynml\n\tqbt.' |
./sort
它能把\0Gur,\0Dhvpx,\0Oebja。。。都输入到char **word里,以\n区分不同字符串,但是能够包括\0,而且数组的长度是任意的
貌似有点难度,求大神帮助

“任意长度”实际上是做不到的,即使所用的软件平台没有限制,硬件环境也不允许。所以“任意长度”应当理解为在一个很大的空间之内没有限制地输入字符串而不用事先确定长度。鉴于这种理解,可以定义一个输入函数,先动态申请一个较大的空间,直接向其内输入字符串;输入完毕后检测其长度,再按实际需要申请一个合适大小的空间,把刚才输入的字符串拷贝到这个合适大小的空间里,再把原先申请的大空间释放。举例代码如下:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define N 131071
char *Any_Long_Str(char *p){
    char *pt;
    if((pt=(char *)malloc(N))==NULL){//Apply for a larger space for temporary use
        printf("Apply for temporary use of space to fail...\n");
        exit(0);
    }
    gets(pt);//Get a string from the keyboard
    if((p=(char *)malloc(strlen(pt)+1))==NULL){//Apply for a suitable size of space
        printf("Application memory failure...\n");
        exit(0);
    }
    strcpy(p,pt);//Copy the string pt to p
    free(pt);//Release the temporary use of space
    return p;
}
int main(void){
    char *pstr=NULL;
    printf("Input a string:\n");
    pstr=Any_Long_Str(pstr);
    printf("%s\n",pstr);//Look at...
    free(pstr);//Release the space
    return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-10
以下是我的思路,仅供楼主参考:
遍历数组,统计'\n'的次数,从而为指向字符串的指针数组分配内存。
然后遍历数组,计算当前子字符串的字符数,然后分配内存,copy。
第2个回答  2013-02-10
你想:
(1)\0\n\t 这些属 转义字符,你现在想 作为 非转义字符 输入和判断。
(2)以\n区分不同字符串,但输入串最后 有 \n 还是没有,还是可能有可能无?
(3)输入长度不定,结果存入 **word.
解决办法:
用gets() 读入整行输入
分析有多少个 \n 和 字符串最长的长度需要。
动态分配 word.
把整行 字符串 ,拆开 存入 word
程序如下:
#include<stdio.h>
main(){
char c;
char buff[4098];
int L,i,j,n=0,w=0,wm=0,N;
char **word;
gets(buff);
L = strlen(buff);for (i=0;i<L-1;i++)
{
if (buff[i+1]=='n' && buff[i]=='\\'){
if (w>wm) {wm=w;};
n++;i++;w=0;
}
w++;
}
printf("n=%d wm=%d\n",n,wm);

N=n+1;
word = (char **) malloc(sizeof(char *) * N);for (i = 0; i < N; i++)
word[i] = (char *) malloc(sizeof(char) * wm);

L = strlen(buff); n=0;w=0;for (i=0;i<L-1;i++)
{
word[n][w]=buff[i];
if (buff[i+1]=='n' && buff[i]=='\\'){
word[n][w]='\0';
n++;i++;w=0;
}
w++;
}

for (j=0;j<N-1;j++){for (i=0;i<wm;i++) printf("%c",word[j][i]);
printf("\n");
}
printf("%s\n",word[j]);

return 0; }

例子:
\0Gur\n\0Dhvpx\n\0Oebja\n\0sbk\n\twhzcf\n\tbire\n\tgur\n\tynml\n\tqbt\n
n=9 wm=8
\0Gur
\0Dhvpx
\0Oebja
\0sbk
\twhzcf
\tbire
\tgur
\tynml
\tqbt本回答被提问者采纳
第3个回答  2013-02-10
任意的?有多长呢?

define len 长度
char **word【len】

if(word【len】==“、n”)

唉。。
第4个回答  2013-02-10
干嘛不做环境变量呢 ?

c语言如何输入任意长度的字符串数组
鉴于这种理解,可以定义一个输入函数,先动态申请一个较大的空间,直接向其内输入字符串;输入完毕后检测其长度,再按实际需要申请一个合适大小的空间,把刚才输入的字符串拷贝到这个合适大小的空间里,再把原先申请的大空间释放。举例代码如下:\/\/#include "stdafx.h"\/\/If the vc++6.0, with this ...

c语言中怎么实现任意长度字符串输入
int n=0,k=100; \/\/初始化,字符串长度为0,字符串空间长度为100 char * s2 = NULL,s1 = (char *)malloc(100); \/\/初始化字符串空间 if (s1 == NULL) return; \/\/内存分配失败,返回 while((c=getchar())!=EOF){ \/\/判断是否到文件结束,一个个读取字符 ...

C语言怎么实现可变长度字符串
char * p = (char*)malloc(sizeof(char)*n)别忘了free C++和C#的string类型在最低层实际也是利用类似方法去做的 另外有一种 char str[SIZE_MAX]也有人喜欢用 realloc函数 只是不太推荐,主要原因是以前系统上这个函数操作会出问题,因为内存的原因 ...

C语言怎么实现字符串的任意输入
使用gets函数即可实现输入任意字符串。1、gets函数:原型:char * gets(char * buffer);功能:从stdin流中读取字符串,直至读到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为 \\0 空字符,并以此结束字符串;说明:当使用unic...

c语言怎么输入任意长度的一个数组
其次,所谓的任意长度,其实就是可变长数组。那么,在事先不知道数组规模下,就要靠输入,来确定数组大小了。重点在于,要开辟多大的数组来存 一般有这么几种情况 1 直接开一个足够大的。 比如 虽然不知道有多大,但最大不超过1000个,那就可以直接开个1000元素的数组。2 动态分配, 使用malloc动态...

C语言程序设计实现任一字符和字符串长度的输出,其中字符和字符串内容由...
输入任意长度字符串,并输出打印字符串及其长度。include<stdio.h>#include<malloc.h>#include<conio.h>char *input();\/\/输入任意长度字符串(可包含空格),回车确认,返回输入的字符串int getLen(char *str);\/\/通过指针获取字符串长度void meError(void *p);\/\/内存申请失败int main(){ char ...

c语言中,怎么定义一个随意大小的字符串呢?
include <stdio.h>#include<malloc.h>#include<string.h>#define maxsize 10int main(){ char *str,*strSave,cSave; int i,n=2,strSize; strSize=maxsize; str=(char *)malloc(sizeof(char)*strSize); printf("输入任意长度字符串:"); for(i=0;i<strSize;i++...

请问在c语言中输入一串字符串(字符串长度不定,随意输入),赋值到数组...
if(str[j]>='0'&&str[j]<='9') {printf("包含数字,请重新输入。\\n\\n");break;} if(str[j]<'A'||(str[j]>'Z'&&str[j]<'a')||str[j]>'z') {printf("包含其他字符,请重新输入。\\n\\n");break;} if(j==i-1) b=false;} } printf("输入的字符串为:%s\\n",str);...

c语言中函数里面怎么输入字符串数组
在C语言中,字符串是以字符数组方式保存的,于是字符串数组可以用二维字符数组存储。输入时,每次输入字符串数组的一个元素(一行),根据需要,使用scanf或gets进行输入。如:char str[10][100]; \/\/定义字符串数组,供10行,每行最多100个字节数据。int i;for(i = 0; i < 10; i ++)scanf("...

c语言字符串数组怎么输入和输出呢
在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是:puts():输出字符串并自动换行,该函数只能输出字符串。printf():通过格式控制符%s输出字符串,不能自动换行。除了字符串,printf() 还能输出其他类型的数据。这两个函数相信大家已经非常熟悉了,这里不妨再演示一下,请看下面的...

相似回答