【发布时间】:2017-05-30 22:18:25
【问题描述】:
出于教学目的,我正在开发一个从标准输入读取字符串(字符数组)的程序。目标是允许程序根据输入的维度顺序增加分配的内存。我想听听您对我的方法的意见。
我想我可以为每个需要的读取周期一个一个地分配一个字节的空间。显然,它不起作用。我该如何解决这个问题?是否值得一试?
感谢您的耐心和支持!
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main(){
char *q;
int flag = 1, j = 0;
printf("\n\nNow let's go for a word of undefined lenght. Type it:\n\n");
do{
q++ = calloc(1, sizeof(char));
flag = ((q[j] = getchar()) != 0); #Until it is valid.
++j;
}while(flag);
return 0;
}
【问题讨论】:
-
首先,阅读
getchar()的文档。完成后返回EOF,而不是零。第二个q++ = calloc(1, sizeof(char)不增长缓冲区。它分配(并泄漏)一个,然后递增calloc()返回的指针。 -
感谢@Peter,这是一个非常有价值的建议。我没想过这样的观点。
-
您应该首先以 sscanf 手册页中的代码为例。
-
查找 realloc()。您希望从分配 1 开始,然后在每个字节进入时重新分配到 2、3、4 .. 等。(还有其他优化,但这是一个开始)。
-
getchar()返回int类型的值。永远不要使用char来存储getchar()的返回值。
标签: c memory-management