- ベストアンサー
C言語にて、以下のような配列を定義した場合の初期化(0埋め)方法が分か
C言語にて、以下のような配列を定義した場合の初期化(0埋め)方法が分からずに困っています。 char name[50][30]; <現在やっている事> memset(&name[0][0], 0x00, sizeof( name )); 上記の方法では、sizeofの値が正しくないように思っている (正しい値は30と考えています)のですが、 正しくはどのように行うものでしょうか。 どなたか教えていただけると幸いです。 以上ですが、よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
charが1Byteとすると char name[50][30]で1500個分のcharを確保していますよね sizeof(name)は1500を返しますので、確保した全領域をセット出来ます "30"では30Byteしかメモリセットしません
その他の回答 (4)
- asuncion
- ベストアンサー率33% (2127/6289)
>上記の方法では、sizeofの値が正しくないように思っている >(正しい値は30と考えています)のですが、 正しい値は30であるという考えが正しいかどうかは、 他のかたの回答どおり、printfしてみれば一発でわかりますよね。 考えています、ではなくてコードを書いて確認。
- jgk
- ベストアンサー率75% (104/138)
30が欲しいのであれば、 sizeof( name[0] ) でしょう。
- Tacosan
- ベストアンサー率23% (3656/15482)
言語的に純粋な意味で「初期化」というなら char name[50][30] = {{0}}; だけで十分では.
- magicalpass
- ベストアンサー率58% (378/648)
どう初期化されるのが望ましいと思われていますか? sizeof(name)の値を実際に表示とかさせてみて、それは相応しくないということでしょうか? > memset(&name[0][0], 0x00, sizeof( name )); この処理を実行した場合、nameの全領域(1500byte)が0で初期化されます。別の結果を期待しているのであれば、何を期待しているのか具体的に示してください。 ま、char name[50][30]が、文字列領域50個の配列と考えるなら、各文字列領域の先頭だけ'\0'で埋めるという初期化の形もありますけど。