[英]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
ftell
和fseek
功能在作为二进制流打开的文件上可以一致地工作(更重要的是-表现出预期)。
但是,当将文件作为文本流打开时(仅指定"r"
而不是"rb"
),将出现行尾和文件尾字符转换,因此总是会偏离fseek
的方式。和ftell
工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.