私はファイルに整数を書き込もうとしています(オープンモードはwです)。 fprintfはそれを正しく書きましたが、fwriteは意味不明な言葉を書きました:
int length;
char * Word = "Word";
counter = strlen(Word);
fwrite(&length, sizeof(int), 1, file);
fwrite(Word, sizeof(char), length, file);
ファイルの結果は次のとおりです。
語
しかし、代わりにfprintfを使用すると、次のようになります。
int length;
char * Word = "Word";
counter = strlen(firstWord);
fprintf(file, "%d", counter);
fwrite(Word, sizeof(char), length, file);
私はこの結果をファイルで取得します:
4ワード
誰かが私が間違ったことを言うことができますか?ありがとう!
更新:最終的に書き込みをバイナリに変更したいのですが(ファイルをwbモードで開きます)、実装に違いはありますか?
fprintf
は文字列を書き込みます。 fwrite
はバイトを書き込みます。したがって、最初のケースでは、整数を表すバイトをファイルに書き込んでいます。その値が「4」の場合、4バイトは印刷不可能なASCIIの範囲にあるため、テキストエディタには表示されません。ただし、のサイズを見るとファイルの場合、おそらく4バイトではなく8バイトになります。
printf()
を使用すると、整数が一連の文字に変換されます。この場合は_"4"
_です。 fwrite()
を使用すると、整数値を構成する実際のバイトが書き込まれます。この場合、文字_'w', 'o', 'r',
_および_'d'
_の4バイトが書き込まれます。