- ベストアンサー
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を入れると考えて宜しいでしょうか? ご面倒かと思いますが よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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バイト読み込まれます。
その他の回答 (1)
- chirubou
- ベストアンサー率37% (189/502)
1. fread() は第2引数と第3引数の値の積だけ読み込みます。ですので、もし第2引数を sizeof(buf) にすると、この値は4(char buf[4];だから)になってしまい、4×3バイト読み込んでしまいます。 2. 3でも動作は全く同じですが、こうすると文字(バイト)であることが明記され他人が読み易くなるというこです。 3. その通りです。こうするとbufの最後が必ず文字列の終端を示す'?0'(ゼロ)になりますので、デバッグ等でprintf()が簡単になります。
お礼
ご返事有り難うございました。 大変に参考になりました。
お礼
ご返事有り難うございました。 大変に参考になりました。