0

開いたり、変更したり、閉じたりするバイナリファイルがあります。そして、私printfはコンソールに行きます。

これはすべて正常に機能しますが、コンソールに印刷しているものはすべてバイナリファイルの最後に追加され、ファイルが開いているか閉じているかは関係ありません。

同じことが。でも起こりfprintfます。

何が起きてる?ファイルI/Oについて理解できないことがありますか?

更新:コードは次のとおりです。

FILE *out = fopen("test","wb+");
fseek(out,0,SEEK_END);
fwrite("test",1,10,out);
fwrite("test",1,10,out);
fwrite("test",1,10,out);
int pos = ftell(out);
fwrite(&pos,sizeof(int),1,out);
fclose(out);
fprintf(stdout,"%s","hello");
4

1 に答える 1

3

の呼び出しは、5 文字の配列から文字を書き込むfwrite()ように指示しているため、正しくありません (文字列リテラルには暗黙の null 文字が追加されています)。これは配列の端を越えてアクセスするため、未定義の動作が発生し、奇妙な動作の原因となる可能性があります。fwrite()10

fwrite()呼び出しを修正します。

fwrite("test", 1, 4, out);

コメントに従って、10 文字が必要な場合は、配列を宣言します。

char msg[10] = "test"; /* Unspecified elements will be null. */

fwrite(msg, 1, sizeof(msg), out);
于 2012-10-09T09:41:00.790 に答える