因此,我一直在尝试以各种不同的方式将其用于分配工作,但每次我都会遇到不同的错误。基本上我们所拥有的是一个程序,它需要逐字节读取将通过管道输入的文件的内容(文件长度可能很大,所以我们不能只调用 malloc 并分配一大块空间)。我们需要使用 realloc 来扩展释放的内存量,直到到达文件末尾。最终结果应该是一个包含每个字节的长 C 字符串(数组)(如果它们是文件的一部分,我们也不能忽略空字节)。我目前拥有的是:
char *buff;
int n = 0;
char c;
int count;
if (ferror (stdin))
{
fprintf(stderr, "error reading file\n");
exit (1);
}
else
{
do {
buff = (char*) realloc (buff, n+1);
c = fgetc (stdin);
buff[n] = c;
if (c != EOF)
n++;
}
while (c != EOF);
}
printf("characters entered: ");
for (count = 0; count < n; count++)
printf("%s ", buff[count]);
free (buff);
它应该一直读取到文件末尾,每次都扩展内存但是当我尝试通过管道在一个简单的文本文件中运行它时,它告诉我我有一个分段错误。我不太确定我做错了什么。
请注意,我们被允许使用 malloc 和诸如此类的东西,但我看不出如何使它工作,因为我们知道需要多少内存。