如果我跑:
FILE* pFile = fopen("c:\\08.bin", "r");
fpos_t pos;
char buf[5000];
int ret = fread(&buf, 1, 9, pFile);
fgetpos(pFile, &pos);
我得到ret = 9和pos = 9.
但是如果我跑
FILE* pFile = fopen("c:\\08.bin", "r");
fpos_t pos;
char buf[5000];
int ret = fread(&buf, 1, 10, pFile);
fgetpos(pFile, &pos);
按预期ret = 10,但pos = 11!
这怎么可能?
答案 0 :(得分:8)
您需要以二进制模式打开文件:
FILE * pFile = fopen("c:\\08.bin", "rb");
区别在于通过读取库认为是换行符并扩展它的字符 - 二进制模式阻止扩展。
答案 1 :(得分:1)
这是Windows的事情。在文本模式下,Windows在写入时将'\ n'扩展为'CR''LF',并在读取时将'CR''LF'压缩为'\ n'。文本模式是Windows上的默认模式。正如Neil所提到的,在fopen()的模式字符串中添加“b”会关闭换行符。您不会在* nix系统上进行此翻译。