下面这段代码被gcc 6.3版本认为是有效的C语言代码:
然而,以下操作失败了:
我相信这种情况肯定有合理的原因,但我想知道是什么。这个问题是由于初始化字节数组时(所以是无符号的char而不是char),很容易写出类似于
char white[] = { 'a', 'b', 'c' };
char blue[] = "abc";
char *red = "abc";
然而,以下操作失败了:
char *green = { 'a', 'b', 'c' }; // gcc error
我相信这种情况肯定有合理的原因,但我想知道是什么。这个问题是由于初始化字节数组时(所以是无符号的char而不是char),很容易写出类似于
{ '\x43', '\xde', '\xa0' }
而不是 "\x43\xde\xa0"
,一旦你忘记写my_array[]
而不是*my_array
,你就会被编译器抓住。
\0
)。 - abelenkychar *green = { "a", "b", "c" };
.... ;) - LPs