我明白,在仔细阅读cplusplus.com的 C 库参考之后,“对于文本流,数值[由 ftell() 返回]可能没有意义”
我的问题是:这是否意味着我不能绝对确定当我读取 3000 个字符时返回的值会大于仅读取 3 个字符时返回的值?
提前致谢,
若昂席尔瓦。
我明白,在仔细阅读cplusplus.com的 C 库参考之后,“对于文本流,数值[由 ftell() 返回]可能没有意义”
我的问题是:这是否意味着我不能绝对确定当我读取 3000 个字符时返回的值会大于仅读取 3 个字符时返回的值?
提前致谢,
若昂席尔瓦。
来自 C 标准:
7.21.9.4
ftell
函数
概要
#include <stdio.h>
long int ftell(FILE *stream);
描述
该ftell
函数获取stream指向的流的文件位置指示符的当前值。对于二进制流,该值是从文件开头开始的字符数。对于文本流,其文件位置指示符包含未指定的信息,fseek
函数可使用该信息将流的文件位置指示符返回到ftell
调用时的位置;两个这样的返回值之间的差异不一定是衡量写入或读取字符数的有意义的量度。
(强调我的)
我认为这很清楚,但如果没有,请发表评论。
是的。如果ftell()
的数值没有意义,那么两个这样的值之间的关系也没有意义。据推测,图书馆文档的措辞允许文件系统使用某种形式的内部记录,这些记录可能不会按递增顺序编号。
OTOH,我还没有看到值不是从文件开始的字节偏移量的系统。在某些系统 *(如 Windows 和 DOS)上,对两个字符的行尾进行了调整。
不。这意味着例如当文件位置位于文件末尾时ftell
,文本流返回的值可能不是文件中的实际字节数。这是由于不同的行尾约定以及如何在输入中处理这些约定。因此,从本质上讲,您不应该对ftell
值进行数学运算,例如将它们彼此相减,甚至不应该减去 0 来计算从文件开头到当前位置的字节数。
这意味着返回的值仅适用于将文件位置指示器重新定位到获得的相同位置。