考虑这段代码:
FILE * fp = fopen( filename, "r" );
int ret = fscanf(fp, "%d, %d, %d, %d, %d\n", &a, &b, &c, &d, &e);
if (ret != 5)
{
// error and exit
}
long file_pos = ftell(fp);
printf("file position: %ld\n", file_pos);
正在读取的文件行是:
6, 5, 3, 2, 6\r\n
也就是说,该文件具有 Windows 行结尾。
文件位置是 20,而我预计它是 15。
但是,如果我将文件打开模式更改为二进制 ( "rb"
),文件位置是 15,正如预期的那样。
谷歌搜索后,我找不到任何关于为什么会发生这种情况的线索,但只发现人们建议不要使用 fscanf() 。
但我想知道为什么文件指针不在它应该在的位置。