如何使用动态分配内存来使得char *p能存下从键盘输入的不定长字符串
比如我定义char *ch;
我想puts(ch);
但是我怎样根据输入去定义空间?有没有办法?
[解决办法]
很简单,你一次定义malloc给ch一个预留大小比如char *ch = (char *)malloc(256*sizeof(char));
ch[0]='\0';初始化它。
再用一个临时数组,比如
char temp[128] = {'\0'};
然后fgets(temp, 128, stdin);
fgets会读输入127个字节,如果一行没读完,剩下的还会在缓冲区里。而且fgets会把回车也读入进去。
所以你直接用strchr判断一下这个temp里有没有'\n'。如果有说明一行读完了。直接strcpy给ch就可以了。
如果没读完的话,就realloc扩充ch的大小,同样strcpy给ch,然后fgets新读入,并把新的内容strcat给ch就可以了,如此循环。
[解决办法]
#include <stdio.h>#include <malloc.h>int main(void){ char *str; int length; printf("Input length:"); scanf("%d", &length); str = (char*)malloc(sizeof(char)*length); if (str == NULL) { printf("Not enough memory to allocate buffer\n"); return 0; } printf("Input string:\n"); scanf("%s", str); //printf("String is :\n%s\n", str); puts(str); free(str); return 0;}
[解决办法]
不过有的系统stdin的内部buffer只有256个字节或4096个字节。反正如果你嫌麻烦,只读入256字节不再realloc也行,毕竟大于256个字节的输入情况十分少见,剩下的直接丢掉算了。
[解决办法]
麻烦一点,用 malloc 分配一个长度固定的空间(比如256),记录使用情况,如不够,用 realloc 再分配更大一点的空间(比如256*2)..........
[解决办法]
可以用realloc扩展
[解决办法]
linux下直接用getline。。。