- ベストアンサー
文字列の初期化について
基礎的な質問です。C言語で宣言時にchar cChar[5] = ""といった形で初期化した場合、5バイト分すべての領域が0x00となるのでしょうか?それとも最初の1バイトだけが0x00となるけれども2バイト目以降はどんな値が入っているかわからないのでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
staticやexternの場合0で初期化されます。 auto変数の場合、2バイト目以降はわかりません。 たいていの処理系ではauto変数でも初期化されるようですが、それに依存するようなコードは書かない方が良いです。 (自分で明示的に初期化した方が安心です)
その他の回答 (5)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.6
>http://blog.hj.to/isami/archives/000520.html static(静的)変数限定の話では? 静的変数は明示的に初期化されない場合,0 と初期化されるそうです。[C99, 6.7.8, 10] 配列の初期化において、 初期化子に要素数よりも少なく値を指定すると,残りには 0 が入るそうです。[C99, 6.7.8, 21] また、C99なんてところまで準拠してなくてもANSI C準拠であれば、”自動”変数配列の初期化で指定した以降の要素は0x00で初期化されるはずです。
noname#10173
回答No.4
- jacta
- ベストアンサー率26% (845/3158)
回答No.3
コンパイラにバグがあるか、非標準処理系でない限り、明示的に初期値を指定していない配列の要素は0に初期化されます。
noname#10173
回答No.2
使っているCコンパイラによって違うと思います。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.1
値を指定した以降の領域は0x00になります。
お礼
皆様ありがとうございました。 皆様の意見をまとめると、0と初期化されるのかもしれないけれども、(意見が割れているようですが。。。)コンパイラによっては初期化されないかもしれないため、明示的に初期化するのが安心ということですね。大変参考になりました。