11

C++ の次のコードを見てください。

char a1[] = {'a','b','c'};
char a2[] = "abc";
cout << sizeof(a1) << endl << sizeof(a2) << endl;

1バイトですが、出力が 3 ではなく 4 とsizeof(char)表示されるのはなぜですか?sizeof(a2)a1

4

3 に答える 3

22

C文字列にはnullターミネータが含まれているため、文字が追加されます。

本質的にこれ:

char a2[] = {'a','b','c','\0'};
于 2012-05-24T10:51:15.070 に答える
2

これは、最初の変数が 3 つの別個の文字の配列で'\0'あるのに対し、C 文字列の末尾に余分な null文字が追加されているためです。a1

sizeof変数のバイトサイズを教えてくれますが、strlen実行時にC文字列の長さが必要な場合は好みます。

于 2012-05-24T11:02:55.227 に答える
0

a2の場合、これは文字列であるため、「\n」も含まれます

訂正、Ethan&Adamのコメントの後、これはもちろん'\ n'ではなく、'\0'であるnullターミネータです。

于 2012-05-24T10:52:02.137 に答える