C 期望看到;字符数组的初始值设定项字符串太长;警告
我希望在下面使用gcc的程序中看到两个变量的“字符数组的初始值设定项字符串太长”警告 节目:C 期望看到;字符数组的初始值设定项字符串太长;警告,c,gcc,C,Gcc,我希望在下面使用gcc的程序中看到两个变量的“字符数组的初始值设定项字符串太长”警告 节目: int main() { char str1[4]="1234"; char str2[3]="1234"; (void)str1; // Remove unused variable warning. (void)str2; // Remove unused variable warning. return 0; } 但是,我只收到了一条针对str2的警告 自 cha
int main()
{
char str1[4]="1234";
char str2[3]="1234";
(void)str1; // Remove unused variable warning.
(void)str2; // Remove unused variable warning.
return 0;
}
但是,我只收到了一条针对str2的警告
自
char str1[4]="1234";
相当于
char str1[4]= {'1', '2', '3', '4', '\0'};
char str1[4]= {'1', '2', '3', '4', '\0'};
我们不应该对str1也得到同样的警告吗
这是gcc中的缺陷吗
编译器命令:
gcc-墙壁-标准=c99 soc.c-o soc
gcc
版本为4.8.4
更新
我刚才知道
char str1[4]="1234";
不等于
char str1[4]= {'1', '2', '3', '4', '\0'};
char str1[4]= {'1', '2', '3', '4', '\0'};
更新2
char str1[4]="1234";
在C++11中格式不正确(第8.5.2/2节)。我不认为C99和C++11会以不同的方式对待它们。C标准第6.7.9节内容如下:
char s[] = "abc", t[3] = "abc";
定义“普通”字符数组对象s和t,其元素用字符串文字初始化。此声明与
char s[] = { 'a', 'b', 'c', '\0' }, t[] = { 'a', 'b', 'c' };