0

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

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

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

干杯

4

1 回答 1

3

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

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

ftell您可以使用and获取和设置当前文件位置fseek(受一些限制,例如标准 C 不需要ftell返回文本文件的实际字节偏移量,只是一些可以传递给的“幻数” fseek(但我已经在实际实现中从未见过))。

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

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

于 2016-06-11T09:27:58.430 回答