繁体   English   中英

fseek行为与二进制文件

[英]fseek behavior with binary file

我正在使用二进制格式。

我注意到

fseek(fp, offset, SEEK_SET);
fread(&mystruct, sizeof(struct mystruct_thing), 1, fp);

产生与简单不同的输出

fread(&mystruct, sizeof(struct mystruct_thing), 1, fp);

遵循预期的行为。

为什么会这样呢? 是因为SEEK_SET覆盖了offset参数吗?

fread的第二个参数是要读取的每个项目的大小,在这种情况下为struct 我不明白您如何期望偏移量到达那里–它应该类似于sizeof(mystruct)

编辑 :既然问题已被编辑,那么这两段代码产生不同结果的原因很简单,就是第一段代码在读取之前先寻找fp的位置以进行offset ,而第二段代码则不会。 fread fp 的当前位置开始读取sizeof(struct mystruct_thing)字节,因此起始位置有所不同(假定offsetfseek之前的位置不同),因为fseek设置了将来读取 (和写入)的位置。

第一个片段将从offset字节读取一个结构到文件中,第二个片段将从当前文件位置读取它-如果文件刚刚打开,则为零。

显而易见的解释可能是offset不等于零。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM