出于教学目的,我正在研究一个从标准输入中读取字符串(字符数组)的程序。目标是允许程序按顺序增加根据输入维度分配的内存。我希望你对我的方法有所了解。
我想我可以为每个需要的阅读周期逐个分配一个字节的空间。显然,它不起作用。我怎么能解决这个问题?是否值得尝试?
感谢您的耐心和支持!
#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;
}
答案 0 :(得分:1)
一次读取整个输入通常是错误的。
标准方法是获取几千字节的缓冲区并以该大小的块读取和处理数据,覆盖以前读取的数据,这些数据现在是无用的。
在极少数情况下,您需要将所有内容放在ram中并从常规文件中读取,您可以fstat文件以获取其大小并进行相应分配。如果文件很大(大小为兆字节),你应该mmap。
最后,在非常罕见的情况下,您需要阅读内容并且您无法提前知道大小,方法是每次重新分配加倍大小。即大小* = 2; new = realloc(p,size); p = new; ....