【发布时间】:2021-12-07 19:09:49
【问题描述】:
我开始学习 C 并且我正在使用文本文件。从它们加载文本,使用它,然后在同一个文件中更新它。我被告知 fseek() 不能保证每次都在文本文件中工作,我无法真正理解为什么。如果有人能解释一下,那就太好了!!
我还发现如果你这样做了
pos = ftell(file);
fseek(pos);
保证将指针移动到“pos”。是这样吗?
【问题讨论】:
-
您应该阅读库函数 fseek 和 ftell 的文档。此外,您应该包含真实代码(这不是您调用 fseek 的方式)。
-
Ignacio Romero,
fseek()适用于文件的开头、结尾和ftell()的前一个位置。它不适用于这 3 个位置的计算偏移量。有关更多详细信息,最好查看 C 规范。 -
@IgnacioRomero:您可以通过单击分数下方的灰色复选标记来接受其中一个答案。
-
(cont) 我不知道为什么
fseek()/ftell()被广泛教授作为获取文件大小的一种方法。它之所以有效,是因为实现超出了 C 标准。例如,POSIX 说来自ftell()的返回是一个字节偏移量。 Windows 也适用于二进制流,但不适用于文本流。fstat(fileno(fp), &sb)然后读sb.st_size可能是 more portable 而不是fseek()/ftell()。
标签: c file fseek file-pointer