web-dev-qa-db-ja.com

ファイルに整数を書き込む方法(fprintfとfwriteの違い)

私はファイルに整数を書き込もうとしています(オープンモードは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モードで開きます)、実装に違いはありますか?

12
Shai Balassiano

fprintfは文字列を書き込みます。 fwriteはバイトを書き込みます。したがって、最初のケースでは、整数を表すバイトをファイルに書き込んでいます。その値が「4」の場合、4バイトは印刷不可能なASCIIの範囲にあるため、テキストエディタには表示されません。ただし、のサイズを見るとファイルの場合、おそらく4バイトではなく8バイトになります。

21
vanza

printf()を使用すると、整数が一連の文字に変換されます。この場合は_"4"_です。 fwrite()を使用すると、整数値を構成する実際のバイトが書き込まれます。この場合、文字_'w', 'o', 'r',_および_'d'_の4バイトが書き込まれます。

1
David R Tribble