【发布时间】:2013-07-30 09:37:42
【问题描述】:
例如:
char a[] = "abc\0";
标准 C 是否规定必须附加另一个值 0 的字节,即使字符串末尾已经有一个零?那么,sizeof(a) 等于 4 还是 5?
【问题讨论】:
-
您的问题中的英文绝对没有问题。但是你不能通过简单的尝试找到答案吗?
-
如果你想明确一点,你可以写:
char a[] = {'a','b','c','\0'};。这未声明为字符串文字,因此不会附加额外的终止 null。 -
或者,你可以写
char a[4] = "abc\0";。 -
后者可能看起来有点错误,因为标准说附加了一个额外的 '\0' 使字符串文字大小为 5 个字符,因此对于 4 字符数组来说似乎太大了。但是,如果初始化程序对于固定大小的数组来说太大了,多余的元素将被简单地忽略/不用于初始化(第 6.7.8 节第 14 段),这在这种情况下是可以的,但我会避免这样写。