1

Array1 と Array2 は異なる方法で宣言されていると思いますが、どちらも同じ型 (char) を持っています。Array1 と Array2 の両方に、まったく同じ値と同じ量の値が含まれているようです。長さが違う理由がわかりません。誰かが理由を説明してもらえますか?

char Array1[ ] = { 1, 2, 3, 4, 5 };
char Array2[ ] = "\x01\x02\x03\x04\x05";

std::cout << "Length of Array1 = " << sizeof( Array1 )/sizeof( *Array1 )
          << std::endl
          << "Length of Array2 = " << sizeof( Array2 )/sizeof( *Array2 );

出力:

Length of Array1 = 5
Length of Array2 = 6
4

2 に答える 2

5

2 番目の配列には、文字列リテラルに暗黙的な null 終了文字が存在するため、余分な文字が含まれています。

セクション2.14.5 C++11 標準 (ドラフト n3337) の文字列リテラルから、ポイント 14 は次のように述べています。

必要な連結の後、変換フェーズ 7 (2.2) で、すべての文字列リテラルに '\0' が追加され、文字列をスキャンするプログラムがその末尾を見つけられるようになります。

于 2013-02-27T11:52:20.427 に答える
2

文字列は NULL で切り捨てられるためです。文字列リテラル '\0' に余分な文字があります

于 2013-02-27T11:51:47.593 に答える