• ベストアンサー

文字列の初期化について

基礎的な質問です。C言語で宣言時にchar cChar[5] = ""といった形で初期化した場合、5バイト分すべての領域が0x00となるのでしょうか?それとも最初の1バイトだけが0x00となるけれども2バイト目以降はどんな値が入っているかわからないのでしょうか?

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

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で初期化されるはずです。

BIGMON
質問者

お礼

皆様ありがとうございました。 皆様の意見をまとめると、0と初期化されるのかもしれないけれども、(意見が割れているようですが。。。)コンパイラによっては初期化されないかもしれないため、明示的に初期化するのが安心ということですね。大変参考になりました。

noname#10173
noname#10173
回答No.4
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

コンパイラにバグがあるか、非標準処理系でない限り、明示的に初期値を指定していない配列の要素は0に初期化されます。

noname#10173
noname#10173
回答No.2

使っているCコンパイラによって違うと思います。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

値を指定した以降の領域は0x00になります。

関連するQ&A