• ベストアンサー

C言語にて、以下のような配列を定義した場合の初期化(0埋め)方法が分か

C言語にて、以下のような配列を定義した場合の初期化(0埋め)方法が分からずに困っています。 char name[50][30]; <現在やっている事> memset(&name[0][0], 0x00, sizeof( name )); 上記の方法では、sizeofの値が正しくないように思っている (正しい値は30と考えています)のですが、 正しくはどのように行うものでしょうか。 どなたか教えていただけると幸いです。 以上ですが、よろしくお願いいたします。

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

  • ベストアンサー
回答No.1

charが1Byteとすると char name[50][30]で1500個分のcharを確保していますよね sizeof(name)は1500を返しますので、確保した全領域をセット出来ます "30"では30Byteしかメモリセットしません

その他の回答 (4)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.5

>上記の方法では、sizeofの値が正しくないように思っている >(正しい値は30と考えています)のですが、 正しい値は30であるという考えが正しいかどうかは、 他のかたの回答どおり、printfしてみれば一発でわかりますよね。 考えています、ではなくてコードを書いて確認。

  • jgk
  • ベストアンサー率75% (104/138)
回答No.4

30が欲しいのであれば、 sizeof( name[0] ) でしょう。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

言語的に純粋な意味で「初期化」というなら char name[50][30] = {{0}}; だけで十分では.

回答No.2

どう初期化されるのが望ましいと思われていますか? sizeof(name)の値を実際に表示とかさせてみて、それは相応しくないということでしょうか? > memset(&name[0][0], 0x00, sizeof( name )); この処理を実行した場合、nameの全領域(1500byte)が0で初期化されます。別の結果を期待しているのであれば、何を期待しているのか具体的に示してください。 ま、char name[50][30]が、文字列領域50個の配列と考えるなら、各文字列領域の先頭だけ'\0'で埋めるという初期化の形もありますけど。

関連するQ&A