filePointer 在 while 循环中自动进行?

filePointer automatically progressing in while loop?

我目前正在使用 C 文件。 我找到了解释从文件中读取字符串的代码。 但是我真的很好奇这是如何机械工作的。

while (!feof(fPointer)){
fgets(singleLine, 150, fPointer);
puts(singleLine);
}

文件指针如何知道在循环结束时去往下一行?不应该在 while 循环结束时增加文件指针吗?

干杯

FILE 对象存储有关打开文件的信息,包括 "current positition"。每个 read/write 操作都会将当前位置增加 read/written 的字节数。这就是为什么您可以继续在循环中调用 fgets(或任何其他输入函数)并逐块获取内容的原因。

同样,您可以多次调用printf(或任何其他输出函数)来产生输出,它们不会相互覆盖。

您可以使用 ftellfseek 获取和设置当前文件位置(受一些限制,例如标准 C 不需要 ftell 到 return文本文件上的实际字节偏移量,只是一些 "magic number" 可以传递给 fseek(但我从未在实际实现中看到过))。

(你的 fPointer 只指向一个 FILE 对象。你不应该增加这个指针;它只会指向随机内存。)

最后,while (!feof(fp))是错误的,因为feof查询存储在FILE对象中的"end of file"位。它不会预测下一次读取是否会因到达文件末尾而失败。 "end of file" 位仅在输入函数到达文件末尾后才设置为真。这种循环将在文件结束后再次运行,然后处理垃圾(或陈旧,来自上一次迭代)数据。