gpt4 book ai didi

c - filePointer 在 while 循环中自动进行?

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:24 26 4
gpt4 key购买 nike

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

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

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

干杯

最佳答案

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

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

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

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

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

关于c - filePointer 在 while 循环中自动进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37761856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com