假设我有以下几个 C 字符数组:
char okaysize4[5] = "four"; // line 5
char toosmall4[4] = "four"; // line 6
char toosmall3[3] = "four"; // line 7
使用gcc 4.4.7编译时,我遇到了以下错误:
array.c:7: warning: initializer-string for array of chars is too long
这个错误对于第7行是预期的,因为我试图把五个字符("four" + \0)
塞进一个3元素的数组里。
而对于第5行没有错误是预期的,因为这个5元素的数组足够大。
然而,我惊讶的是第6行没有类似的错误。在toosmall4
中被初始化的是一个未终止的字符串,这可能会引起各种麻烦。
我的理解是c字符串字面值"four"
应该有五个字符长度,因为有空字符结束符。实际上,sizeof("four")
为5。那么为什么编译器不会在这里报错呢?
有没有一些方法可以更改我的声明/定义/初始化,以便在这种情况下标记一个错误?