3

私はCモジュールを書いていますが、これまでに見たことのない興味深い問題に直面しています。

// Many other operations before this point
fseek(samples_file, 0, SEEK_SET);
printf("ftell A1 %llu\n", ftell(samples_file));
count = fwrite(channel_buffer+chan_type.size*set_index, 1, chan_type.size, samples_file);
printf("count %llu\n", count);
printf("ftell A2 %llu\n", ftell(samples_file));
// Many more operations to come after this point

モジュールを実行すると、次のような印刷出力が表示されます。

ftell A1 0
count 8
ftell A2 6018

ファイルポインタをファイルの先頭に設定しました。データを書き込むときは、目的の位置にデータを書き出してから、書き込まれたバイト数(この場合は8)でファイルの位置をインクリメントする必要があります。しかし、私がftellを実行すると、位置が突然6018(ファイルの元のサイズに8を加えたもの)にジャンプしたようです。

なぜこれが発生し、どうすればこの動作を防ぐことができますか?

4

1 に答える 1

5

ファイルが追加モードで開かれているようです。"a"の2番目の引数にがないことを確認してくださいfopen()

于 2012-11-27T07:59:34.980 に答える