我目前正在使用 C 语言进行文件使用。我找到了一个解释从文件中读取字符串的代码。但是我真的很好奇这是如何机械地工作的。
while (!feof(fPointer)){
fgets(singleLine, 150, fPointer);
puts(singleLine);
}
文件指针如何在循环结束时知道要下一行?文件指针不应该在while循环结束时增加吗?
干杯
我目前正在使用 C 语言进行文件使用。我找到了一个解释从文件中读取字符串的代码。但是我真的很好奇这是如何机械地工作的。
while (!feof(fPointer)){
fgets(singleLine, 150, fPointer);
puts(singleLine);
}
文件指针如何在循环结束时知道要下一行?文件指针不应该在while循环结束时增加吗?
干杯
FILE
对象存储有关打开文件的信息,包括“当前位置” 。每个读/写操作都会将当前位置增加读/写的字节数。这就是为什么您可以fgets
在循环中继续调用(或任何其他输入函数)并逐块获取内容。
同样,您可以printf
多次调用(或任何其他输出函数)来产生输出,并且它们不会相互覆盖。
ftell
您可以使用and获取和设置当前文件位置fseek
(受一些限制,例如标准 C 不需要ftell
返回文本文件的实际字节偏移量,只是一些可以传递给的“幻数” fseek
(但我已经在实际实现中从未见过))。
(你fPointer
只指向一个FILE
对象。你不应该增加这个指针;它只会指向随机内存。)
最后,while (!feof(fp))
是错误的,因为feof
查询存储在FILE
对象中的“文件结束”位。它不会预测下一次读取是否会因为到达文件末尾而失败。“文件结束”位仅在输入函数到达文件末尾后设置为真。这种循环将在文件结束后再次运行,然后处理垃圾(或来自上一次迭代的陈旧)数据。