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

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

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

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

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' ,没有空终止符。

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