49

例えば:

char a[] = "abc\0";

標準 C0では、文字列の末尾に既にゼロがある場合でも、別のバイトの値を追加する必要があると言っていますか? では、sizeof(a)4 または 5 に等しいですか?

4

1 に答える 1

73

すべての文字列リテラルには、文字列の内容に関係なく、暗黙の null ターミネータがあります。

標準 (6.4.5 文字列リテラル) は次のように述べています。

文字列リテラルまたはリテラルから生じる各マルチバイト文字シーケンスに、値ゼロのバイトまたはコードが追加されます。

そのため、文字列リテラル"abc\0"には、明示的なものに加えて、暗黙的な null ターミネータが含まれています。したがって、配列aには 5 つの要素が含まれます。

于 2013-07-30T09:42:05.163 に答える