为什么字符串的字节大小比长度长?

时间:2013-06-03 21:08:21

标签: c string byte sizeof

为什么sizeof("Bill")5sizeof(char)1

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

我认为它可能与"Bill"是一个字符数组有关,但为什么会增加字节大小?

2 个答案:

答案 0 :(得分:22)

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

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

根据C标准, 6.4.5字符串文字部分,第7段:

  

在转换阶段7中,将值0的字节或代码附加到由字符串文字或文字产生的每个多字节字符序列。

如果您希望得到4的长度答案,则应使用strlen("Bill"),而不是sizeof

如果你真的不想要null终结符,那也是可能的,虽然可能是不明智的。这个定义:

char bill[4] = "Bill";

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

答案 1 :(得分:3)

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