首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么使用动态分配内存来使得char *p能存上从键盘输入的不定长字符串

2012-08-25 
如何使用动态分配内存来使得char *p能存下从键盘输入的不定长字符串比如我定义char *ch我想puts(ch)但是

如何使用动态分配内存来使得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就可以了,如此循环。


[解决办法]

探讨

很简单,你一次定义malloc给ch一个预留大小比如char *ch = (char *)malloc(256*sizeof(char));
ch[0]='\0';初始化它。
再用一个临时数组,比如
char temp[128] = {'\0'};
然后fgets(temp, 128, stdin);
fgets会读输入127个字节,如果一行没读完,剩下的还会在缓冲区里。而且fgets……

[解决办法]
总之就是用这个临时数组temp不断循环的用fgets将一行各个部分读入,并strcat不断合并到ch上去。
[解决办法]
C/C++ code
#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。。。

热点排行
Bad Request.