0

このコードを考えてみましょう:

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()を使用しないことを提案していることがわかりました。

しかし、ファイルポインタが本来あるべき場所にない理由を知りたいのですが。

4

1 に答える 1

1

fscanfはファイルをバッファリングしている可能性があります。つまり、特定のサイズのブロックを読み取り、それを解析して内容をデコードします。

于 2012-07-20T14:55:09.537 に答える