C++ の次のコードを見てください。
char a1[] = {'a','b','c'};
char a2[] = "abc";
cout << sizeof(a1) << endl << sizeof(a2) << endl;
1バイトですが、出力が 3 ではなく 4 とsizeof(char)
表示されるのはなぜですか?sizeof(a2)
a1
C文字列にはnullターミネータが含まれているため、文字が追加されます。
本質的にこれ:
char a2[] = {'a','b','c','\0'};
これは、最初の変数が 3 つの別個の文字の配列で'\0'
あるのに対し、C 文字列の末尾に余分な null文字が追加されているためです。a1
sizeof
変数のバイトサイズを教えてくれますが、strlen
実行時にC文字列の長さが必要な場合は好みます。
a2の場合、これは文字列であるため、「\n」も含まれます
訂正、Ethan&Adamのコメントの後、これはもちろん'\ n'ではなく、'\0'であるnullターミネータです。