用动态申请内存的方法可以解决这个问题,有两种措施可以考虑:
设置一个循环,先动态申请一个较小的空间比如10字节,然后输入字符;当输入满时另外申请一个20字节的空间,把已输入的10个字符拷贝过来,释放掉10个字节的空间。然后向20个字节的空间里接着输入字符,写满时再申请一个30字符的空间……如此反复,直到输入'\n'时结束。
先动态申请一个较大的空间,如65535字节,直接向里输入字符,输入结束后测出长度,按实际需要另外申请一个空间把字符串拷贝过来,释放原来的空间。
措施1比较切合题意,但时效差,空间也不省(最后一瞬需要近二倍的空间)。措施2显得更有实际意义,因为“无限”的长度肯定是不存在的,所以取一个“够用”的大小临时用一下是可取的。下面提供措施2的参考代码:
//#include "stdafx.h"//If the vc++6.0, with this line.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[];由于编译程序无法计数是算作语法错误的。