Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 期望看到;字符数组的初始值设定项字符串太长;警告_C_Gcc - Fatal编程技术网

C 期望看到;字符数组的初始值设定项字符串太长;警告

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

我希望在下面使用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的警告

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节内容如下:

  • 字符类型的数组可以由字符串初始化 文字或UTF−8字符串文字,可选地用大括号括起来。 字符串文本(的连续字节,包括终止 如果有空间或数组大小未知,则为空字符) 初始化数组的元素
  • 例8

    宣言

    char s[] = "abc", t[3] = "abc";
    
    定义“普通”字符数组对象s和t,其元素用字符串文字初始化。此声明与

    char s[] = { 'a', 'b', 'c', '\0' }, t[] = { 'a', 'b', 'c' };
    
  • (我的重点)

    也就是说,如果终止空字符不适合固定的已知大小数组,则不会添加它。

    请参阅