• ベストアンサー

sizeofについて

http://oshiete1.goo.ne.jp/kotaeru.php3?q=2416720 で、質問をさせて頂いた者です。 質問そのものは回答して頂いたお陰で 解決しました。 コードを書いて説明してくれたのですが その中で良く理解できない点が ありましたので 新しく質問をしました。 >fread(buf , sizeof(char), sizeof(char) * 3, fp); 1.どうして「sizeof(char)」は 「sizeof(buf)」ではないんでしょうか? 2.「sizeof(char) * 3」は、 どうして、ただの「3」ではいけないのでしょうか? 3. >buf[3] = '\0'; は、bufの4文字目に 0を入れると考えて宜しいでしょうか? ご面倒かと思いますが よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

1.どうして「sizeof(char)」は「sizeof(buf)」ではないんでしょうか? これは読み込みの単位なのでchar単位で読み込むのかint単位で読み込むのか等で変わってきます。この場合はchar単位の書込ということを示しています。 2.「sizeof(char) * 3」は、どうして、ただの「3」ではいけないのでしょうか? ここはデータの個数なのでただの「3」の方が正しいと思います。 3.>buf[3] = '\0';は、bufの4文字目に0を入れると考えて宜しいでしょうか? 文字列の最後(区切り)という意味で入れてあるのだと思います。 例えば fread(buf , sizeof(int), 3, fp); ですとint型が4バイトの場合4x3の12バイト読み込まれます。

niiza
質問者

お礼

ご返事有り難うございました。 大変に参考になりました。

その他の回答 (1)

  • chirubou
  • ベストアンサー率37% (189/502)
回答No.2

1. fread() は第2引数と第3引数の値の積だけ読み込みます。ですので、もし第2引数を sizeof(buf) にすると、この値は4(char buf[4];だから)になってしまい、4×3バイト読み込んでしまいます。 2. 3でも動作は全く同じですが、こうすると文字(バイト)であることが明記され他人が読み易くなるというこです。 3. その通りです。こうするとbufの最後が必ず文字列の終端を示す'?0'(ゼロ)になりますので、デバッグ等でprintf()が簡単になります。

niiza
質問者

お礼

ご返事有り難うございました。 大変に参考になりました。