繁体   English   中英

fgetc的奇怪行为

[英]Strange behavior of fgetc

我有一段代码,我会在某个周期中执行,并希望得到具体结果:

编码:

fseek(file, start_seek_position, SEEK_SET);
cout << "Cursor befor fgetc: " << ftell(file) << endl;
fgetc(file);
cout << "Cursor after fgetc: " << ftell(file) << endl << endl;

期望:

Cursor befor fgetc: 76
Cursor after fgetc: 77

Cursor befor fgetc: 120
Cursor after fgetc: 121

Cursor befor fgetc: 170
Cursor after fgetc: 171

实际结果:

Cursor befor fgetc: 76
Cursor after fgetc: 44

Cursor befor fgetc: 120
Cursor after fgetc: 94

Cursor befor fgetc: 170
Cursor after fgetc: 151

为什么会这样呢? 我认为fgetc应该将光标位置向前移动一个。

问题可能是您以文本模式而不是二进制模式打开文件。 所以代替这个:

file = fopen(file_name, "r"); // open as text

应该是这样的:

#include <cstdio>
file = fopen(file_name, "rb"); // open as binary stream, not text

ftellfseek功能在作为二进制流打开的文件上可以一致地工作(更重要的是-表现出预期)。

但是,当将文件作为文本流打开时(仅指定"r"而不是"rb" ),将出现行尾和文件尾字符转换,因此总是会偏离fseek的方式。和ftell工作。

暂无
暂无

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

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