電子書籍の厳選無料作品が豊富!

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

char name[50][30];

<現在やっている事>
memset(&name[0][0], 0x00, sizeof( name ));

上記の方法では、sizeofの値が正しくないように思っている
(正しい値は30と考えています)のですが、
正しくはどのように行うものでしょうか。
どなたか教えていただけると幸いです。

以上ですが、よろしくお願いいたします。

A 回答 (5件)

charが1Byteとすると



char name[50][30]で1500個分のcharを確保していますよね

sizeof(name)は1500を返しますので、確保した全領域をセット出来ます

"30"では30Byteしかメモリセットしません
    • good
    • 0

>上記の方法では、sizeofの値が正しくないように思っている


>(正しい値は30と考えています)のですが、

正しい値は30であるという考えが正しいかどうかは、
他のかたの回答どおり、printfしてみれば一発でわかりますよね。
考えています、ではなくてコードを書いて確認。
    • good
    • 0

30が欲しいのであれば、


sizeof( name[0] )
でしょう。
    • good
    • 0

言語的に純粋な意味で「初期化」というなら


char name[50][30] = {{0}};
だけで十分では.
    • good
    • 0

どう初期化されるのが望ましいと思われていますか?



sizeof(name)の値を実際に表示とかさせてみて、それは相応しくないということでしょうか?

> memset(&name[0][0], 0x00, sizeof( name ));

この処理を実行した場合、nameの全領域(1500byte)が0で初期化されます。別の結果を期待しているのであれば、何を期待しているのか具体的に示してください。


ま、char name[50][30]が、文字列領域50個の配列と考えるなら、各文字列領域の先頭だけ'\0'で埋めるという初期化の形もありますけど。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!