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

11
为什么sizeof("Bill")5sizeof(char)1sizeof("Bill") 不应该是 4 吗?因为字符串的长度是 4 个字符(4 x 1)。
我认为这可能与 "Bill" 是一个字符数组有关,但为什么会增加字节大小呢?

4
@H2CO3 - 我同意 - 这是简单的C编程,通常在一本合理的C(或C++)编程书籍的前几章中就会涵盖到。 - Ed Heal
7
这并不是不使用这个问题作为撰写良好的规范答案并希望在互联网上做出改进的理由。 - Carl Norum
2
@EdHeal 也许投票关闭会是你赞同的好迹象 ;) 我完全同意,这个问题非常符合FAQ中“没有研究努力”的术语。 - user529758
1
@H2CO3 - 给我一个机会吧 - 我只有一双手(和一个键盘!) - Ed Heal
2个回答

22

C 字符串以空字符结尾。在该字符串末尾有一个零字节。如果假设使用 ASCII 编码,"Bill" 在内存中的样子如下:

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

根据C标准,第6.4.5节字符串字面量,第7段:

在第七个翻译阶段中,将值为0的字节或代码附加到由一个或多个字符串字面量产生的每个多字节字符序列中。

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

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

char bill[4] = "Bill";

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


3

它以0作为终止字符,所以它是B i l l 0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接