2

ftell が間違った値を返すという問題が発生しています。私のコードは、Linux の netbeans で実行すると正しく報告されますが、まったく同じコードを Windows の netbeans で (mingw を使用して) 実行すると、正しく報告されません。ファイル ポインタは、BINARY_READ で開かれたファイルへのポインタです。Linux の NetBeans では、サブルーチンを実行した後、ftell は 35 を報告します。私の Windows の NetBeans では、同じサブルーチンを呼び出した後、ftell は 3621 です。サブルーチンをトレースしたところ、次のステートメントが問題を引き起こしているようです。

if (((header_size = getc (fp)) == EOF) || (header_size == 0))

私の Linux ネットビーンズでは、このステートメントの後の ftell(fp) は 1 になりますが、私の Windows ネットビーンズでは、このステートメントの後の ftell(fp) は 3585 です。

問題の原因は何ですか?

4

2 に答える 2

8

ファイルをバイナリ モードで開く必要があります。

fp = fopen(name, "rb");

または類似。標準 C ではバイナリ モードだけが明確に定義された動作をするため、常にこれを行う習慣を身に付ける必要があります。ファイルの内容とオフセットを台無しにする方法。

于 2013-10-08T23:31:50.800 に答える