2

これはどのように作動しますか::

char Test1[8] = {"abcde"} ;

私の知る限り、これはTest1のメモリに次のように保存する必要があります

a b c d e 0 SomeJunkValue SomeJunkValue

代わりに、次のように保存されます。

a b c d e 0 0 0

初期化すると、文字列リテラルの後に後続の NULL 文字が 1 つだけ追加されますが、他のすべての配列メンバーがNULLに初期化される方法と理由は? また、基礎となるメソッドまたは関数が何であるかに関するリンクまたは概念的なアイデアはchar TEST1[8] = {"abcde"} ;非常に役立ちます。どうですか:

char Test1[8] = {"abcde"} ;

と違う

char Test1[8] = "abcde" ;

?

4

1 に答える 1

8

部分的に初期化された集計の未指定のメンバーは、その型のゼロに初期化されます。

6.7.9 初期化

21 - 集合体の要素またはメンバーよりもブレースで囲まれたリストに初期化子が少ない場合、または既知のサイズの配列を初期化するために使用される文字列リテラルの文字が配列内の要素よりも少ない場合、集約は、静的ストレージ期間を持つオブジェクトと同じように暗黙的に初期化されます。

10 - [...] 静的またはスレッドのストレージ期間を持つオブジェクトが明示的に初期化されていない場合:

  • ポインター型の場合は、null ポインターに初期化されます。
  • 算術型の場合は、(正または符号なし) ゼロに初期化されます。[...]

arraychar Test1[8]の場合、初期化子{"abcde"}"abcde"は 6.7.9:14 に従って完全に同等です。

文字型の配列は、文字列リテラルまたは UTF-8 文字列リテラルで初期化することができ、オプションで中括弧で囲みます。

于 2012-09-26T07:40:47.200 に答える