所以我一直在尝试以各种不同的方式将其用于作业工作,但每次我都会遇到不同的错误。基本上我们拥有的是一个需要逐字节读取将要通过管道传入的文件内容的程序(文件长度可能很大,因此我们不能只调用 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 等,但我不知道如何实现这一点,因为我们知道需要多少内存。
最佳答案
您在第一次调用 realloc 时使用了未分配的指针 buf。更改为
char *buf = malloc(100);
避免这个问题。
一旦你开始工作,你会发现你的程序效率相当低,每个字符都需要重新分配。考虑以更大的 block 重新分配以减少重新分配的次数。
关于c - 从 stdin 读取(可变长度文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10491769/