所以我有一个被读取的文件。用户可以指定一次打印多少字节。
目前我有:
while(fread(buffer, bytes, 1, txtFile) != '\0')
printf("%s\n", buffer);
但是,如果它首先到达 EOF,它会截断最后一行。例如,如果 bytes = 12
,则打印:
How the migh
ty have fall
...但我希望它打印出来:
How the migh
ty have fall
en!
相反。执行此操作的正确方法是什么?
最佳答案
fread
函数返回从文件中读取的项 数。这个电话:
fread(buffer, bytes, 1, txtFile)
表示尝试读取大小为 bytes
的项目。如果成功则结果为 1
,如果失败则结果为 0
。您编写 != '\0'
的事实表明您可能误解了返回值。它似乎适用于较早的行,因为 0 == '\0'
,但它是一种误导性的写法 0
。
由于文件中只剩下 4
字节,它无法读取大小为 12
字节的项目,因此您的循环退出。
另一个主要问题是您调用 printf("%s"
但是您没有提供字符串作为参数。string 和数组之间存在差异char。字符串以空终止符结尾,这就是 printf
函数知道何时停止打印的方式。
如果改为读取大小为 1
的项目,则可以解决这两个问题,例如:
for (size_t n_read; (n_read = fread(buffer, 1, bytes, txtFile)) > 0; )
{
buffer[n_read] = '\0';
puts(buffer);
}
注意。确保分配的 buffer
中至少有 bytes + 1
字节。
关于c - 每行从文本文件中打印 x 个字节,直到 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26697546/