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

Dan*_*cia 11 c string byte sizeof

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

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

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

Car*_*rum 22

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

'B'  'i'  'l'  'l'  '\0'
0x42 0x69 0x6c 0x6c 0x00
Run Code Online (Sandbox Code Playgroud)

从C标准,第6.4.5字符串文字,第7段:

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

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

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

char bill[4] = "Bill";
Run Code Online (Sandbox Code Playgroud)

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