11

为什么那sizeof("Bill")5但是sizeof(char)1

那不应该sizeof("Bill")4因为字符串的长度是4个字符(4 x 1)吗?

我相信这可能与"Bill"字符数组有关,但为什么会增加字节大小?

4

2 回答 2

22

C 字符串以 null 结尾。该字符串的末尾有一个零字节。假设 ASCII,"Bill"在内存中看起来像这样:

'B'  'i'  'l'  'l'  '\0'
0x42 0x69 0x6c 0x6c 0x00

来自 C 标准,第6.4.5 节字符串文字,第 7 段:

在翻译阶段 7 中,将一个字节或值为零的代码附加到由一个或多个字符串文字产生的每个多字节字符序列。

如果你想得到一个4长度的答案,你应该使用strlen("Bill"),而不是sizeof

如果您真的不想要空终止符,那也是可能的,尽管可能是不明智的。这个定义:

char bill[4] = "Bill";

bill将产生一个仅包含字符'B''i''l'和的 4 字节数组'l',没有空终止符。

于 2013-06-03T21:08:56.893 回答
3

它有一个 0 作为终止符,所以它的 B i l l 0

于 2013-06-03T21:09:04.480 回答