C语言如何定于未知长度的字符串

如题所述

用动态申请内存的方法可以解决这个问题,有两种措施可以考虑:

    设置一个循环,先动态申请一个较小的空间比如10字节,然后输入字符;当输入满时另外申请一个20字节的空间,把已输入的10个字符拷贝过来,释放掉10个字节的空间。然后向20个字节的空间里接着输入字符,写满时再申请一个30字符的空间……如此反复,直到输入'\n'时结束。

    先动态申请一个较大的空间,如65535字节,直接向里输入字符,输入结束后测出长度,按实际需要另外申请一个空间把字符串拷贝过来,释放原来的空间。

措施1比较切合题意,但时效差,空间也不省(最后一瞬需要近二倍的空间)。措施2显得更有实际意义,因为“无限”的长度肯定是不存在的,所以取一个“够用”的大小临时用一下是可取的。下面提供措施2的参考代码:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define N 65535
char *mygets(char *p){
    char *ptmp;
    if((ptmp=(char *)malloc(N))==NULL){//申请一个较大的临时用空间
        printf("Application memory failure...\n");
        exit(0);
    }
    gets(ptmp);//向临时空间直接输入字符串
    if((p=(char *)malloc(strlen(ptmp)+1))==NULL){//按实际需要申请空间
        printf("Application memory failure...\n");
        exit(0);
    }
    strcpy(p,ptmp);//把字符串拷贝所需大小的空间里
    free(ptmp);//释放临时空间
    return p;
}
int main(void){
    char *str=NULL;
    printf("Input a string...\nstr=");
    str=mygets(str);
    printf("%s\n",str);
    free(str);
    return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-11
先分配一个大多数情况下都够用的的空间如果多了以后可以用函数realloc把空间改小一点,如果少了那么就再申请一块,如此下去,直到有一够了为止,最后再接起来。当然,这样太麻烦,偶一般都是定义一个允许用户输入的最大值,比如1000个字符,文档里写清楚,假如用户故意搞乱,程序死了或者得出错误结果偶都是概不负责
第2个回答  2013-07-11
没读明白你这话是什么意思,string str=长度字符串;int len=str.Length; 字符串的长度
第3个回答  2013-07-11
for(i=0;i<strlen(str);i++)
第4个回答  2013-07-11
strlen函数不就是干这个的吗

C语言如何定于未知长度的字符串
20。strlen函数是计算字符串的长度,字符串以'\\0'表示结束,所以strlen在遇到hello后面的'\\0'时就会返回。sizeof跟第1个问题一样。

C语言如何定于未知长度的字符串
设置一个循环,先动态申请一个较小的空间比如10字节,然后输入字符;当输入满时另外申请一个20字节的空间,把已输入的10个字符拷贝过来,释放掉10个字节的空间。然后向20个字节的空间里接着输入字符,写满时再申请一个30字符的空间……如此反复,直到输入'\\n'时结束。先动态申请一个较大的空间,如65...

c语言编程 在未知字符串长度下怎么输入字符串???
定义一个尽可能大的字符串 char s[9999];scanf("%s",s);2.每次读入一个字符,使用realloc动态分配内存 char s[1];char c;scanf("%c",&s[0]);int i = 1;while(scanf("%c",&c)&&c!='\\n'){s = realloc(s,(i+1)*sizeof(s[0]));s[i++]=c;} ...

C语言中如何控制未知长度的数组的输入
方法一:每输入一次,都询问是否继续输入 while(1){ scanf("%d",&a[i]);printf("是否继续?(Y\/N)");c=getchar();if(c=='Y'||c=='y')continue;else break;} 这种方法比较笨 方法二:规定输入的范围,例如要输入的是正整数,那么可以检测输入的是否合法,如果输入了负数就结束循环 while(...

C语言中用动态数组储存一个长度未知的字符串,应该怎么使用malloc和rea...
\\x0d\\x0a比如:*p初始分配10个字符空间。\\x0d\\x0a当空间不够用的时候,每次增加20个字符空间。这样会增加效率。\\x0d\\x0a\\x0d\\x0a象你这样:初始p=(char*)malloc(10);\\x0d\\x0a当判断空间不够用的时候,重分配:\\x0d\\x0ap=(char*)realloc(p,10+100*n++);\/\/n做重分配次数计数...

c语言 如何接受不定长的字符串
不浪费内存有办法:先动态分配(malloc)一个大数组,读入数据后, 考虑字符串长度,用 realloc 缩小数组。include<stdio.h> include<stdlib.h> main(){ char *name;int n=1000;int L;name = (char*) malloc(sizeof(char)*n); \/\/ 动态分配,先考虑 1000字节 scanf("%s",name); \/\/ ...

C语言问题,如何用指针指向未知长度的数组的末尾?
然后P++,直到遇到\\0为止。例子:int a[20]={1,2,3,4} int *p=a \/*p指向数组a首地址*\/ while(*p) \/*这要有值,就为真,p不断往后指*\/ ++p;--p; \/*注意,p最后还会下移一位,指到了\\0,向前一位就指到了末尾的值的了*\/ 不知道楼主满意否啊? 注意:用指针效率高。

C语言中,对于不知道长度的数组怎样输入。。。
1、一维数组的定义、引用和初始化:定义一维数组的一般形式:类型名 数组名[常量表达式]。2、一维数组程序举例:冒泡法。3、得到结果进行输出。4、二维数组常称为矩阵。把二维数组写成行列的排列形式,可以形象的理解二维数组的逻辑结构。5、字符数组的定义,引用和初始化:C语言中没有字符串类型,字符串...

C语言要限定输出字符串的长度应该怎么操作?
C语言还支持专门的字符串输入输出函数:gets\/puts。\\r\\ngets的作用为,读入一行输入,并将读到的换行符替换为字符串结束符。\\r\\nputs的作用为,将字符串单行输出,即输出字符串内容后,会自动在结尾增加换行。\\r\\n定义\\r\\nchar str[100];\\r\\n输入\\r\\ngets(str);\\r\\n输出\\r\\nputs(str);

char a[]字符串不是确定的值,比如x,x可变,这样的c语言程序如何...
*a,只是申明了一个指针型变量a 如果在程序中定义数组,需要:char a[]={"china"};等同于char a[6]={"china"};意思就是自己懒得计算字符串"china"具体要占用几个字符元素了,让编译程序自己帮着数一下再确定数组a有几个元素。直接写char a[];由于编译程序无法计数是算作语法错误的。

相似回答