在cygwin上使用fscanf()读取“text”文件的行

时间:2012-07-20 14:49:02

标签: c windows file-io cygwin

考虑以下代码:

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()。

但我想知道为什么文件指针不在应有的位置。

1 个答案:

答案 0 :(得分:1)

fscanf可能正在缓冲文件 - 即它读取某个大小的块然后解析它以解码内容。