You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何fseek结合ftell获取文件大小得到两种不同结果?

问题解答

首先要明确:这个额外的8字节并不是文件中实际存在的内容,而是你调用fseek时的偏移操作导致的计算结果。

  • 当你执行fseek(file_ptr, 0, SEEK_END)时,文件指针被定位到文件的实际末尾位置,此时ftell返回的480000就是文件的真实大小。
  • 而fseek(file_ptr, sizeof(double), SEEK_END)的作用是:把文件指针从文件末尾的位置再往后偏移sizeof(double)(也就是8字节),此时ftell返回的数值自然是原文件大小加上这个偏移量,也就是480000+8=480008。

这里的关键是理解fseek第三个参数为SEEK_END时的含义:它是以文件末尾作为偏移的起始点,正数偏移就是往文件末尾的后方移动指针,哪怕这个位置已经超出了文件实际的内容范围。这种情况下,指针指向的是一个不存在的“虚拟位置”,并不代表文件真的有这么多字节。

如果你的意图是定位到最后一个double数据的起始位置,正确的写法应该是:

fseek(file_ptr, -sizeof(double), SEEK_END);

这样才是从文件末尾往前偏移8字节,指向最后一个double的起始地址。

内容的提问来源于stack exchange,提问作者DrBwts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:27:24