[英]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)
字节,因此起始位置有所不同(假定offset
与fseek
之前的位置不同),因为fseek
设置了将来读取 (和写入)的位置。
第一个片段将从offset
字节读取一个结构到文件中,第二个片段将从当前文件位置读取它-如果文件刚刚打开,则为零。
显而易见的解释可能是offset
不等于零。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.