我目前正在让自己进入C中的fileusage。 我找到了解释从文件中读取字符串的代码。然而,我真的好奇这是如何机械地工作。filePointer在while循环中自动进行?
while (!feof(fPointer)){
fgets(singleLine, 150, fPointer);
puts(singleLine);
}
filepointer在循环结束时如何知道要进一步行?不应该在while循环结束时增加文件指针?
干杯
我目前正在让自己进入C中的fileusage。 我找到了解释从文件中读取字符串的代码。然而,我真的好奇这是如何机械地工作。filePointer在while循环中自动进行?
while (!feof(fPointer)){
fgets(singleLine, 150, fPointer);
puts(singleLine);
}
filepointer在循环结束时如何知道要进一步行?不应该在while循环结束时增加文件指针?
干杯
约一个打开的文件甲FILE
对象存储信息,包括“当前positition”。每个读/写操作通过读取/写入多少字节来增加当前位置。这就是为什么你可以继续调用fgets
(或任何其他输入函数)在一个循环中,并获取块,块大块。
同样,您可以多次调用printf
(或任何其他输出函数)来产生输出,并且它们不会相互覆盖。
你可以使用ftell
和fseek
(受到一些限制,例如,标准C不要求ftell
回到实际字节的文本文件偏移,只是一些“幻数”可以设置当前文件位置传递给fseek
(但我从来没有在真正的实现中看到过))。
(你fPointer
只是指向一个FILE
对象不应该增加此指针,这只会指向随机内存。)
最后,while (!feof(fp))
是错误的,因为feof
查询“文件结束”的位存储在FILE
对象中。它不预测下一次读取是否会由于到达文件末尾而失败。输入函数到达文件结尾后,“文件结束”位仅设置为真。这种类型的循环将在文件结束后再次运行,然后处理垃圾(或从先前的迭代中过时)数据。
您需要了解更多关于文件搜索和指针移动的信息。在读取了一定数量的字符后,'fgets'函数实际上将文件指针移动到下一行。在你的情况'150' –
是不是'feof()'在'while'? – Cherubim
对不起,我会编辑它。 所以基本上命令fgets自动增加文件指针? –