1. ホーム
  2. c

[解決済み] 整数をファイルに書き込む方法 (fprintfとfwriteの違い)

2022-02-19 14:47:55

質問

ファイルに整数を書き込もうとしています(オープンモードは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ワード

何がいけなかったのか、どなたか教えてください。 ありがとうございます。

update: 最終的にはバイナリへの書き込みを変更したいのですが(wbモードでファイルを開きます)、私の実装に違いはあるのでしょうか?

どのように解決するのですか?

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