为何我的代码出现excess elements in array initializer错误?求解答
问题解决:excess elements in array initializer
错误原因分析
你的代码存在两个问题:
- 变长数组(VLA)不能用初始化列表初始化:
int vettore[n]中的n是变量,属于变长数组。C标准规定,变长数组无法在声明时直接用初始化列表赋值——编译器编译阶段无法确定数组的具体大小,无法完成初始化元素的匹配校验。 - 初始化列表语法错误:
2和12之间缺失逗号,写成了2 12,导致编译器解析元素时出现混乱,误判你提供的元素数量超过数组容量,触发"excess elements"错误。
修复方案
方案1:使用编译期常量定义数组长度(推荐,适合长度固定的场景)
直接用字面量或const修饰的常量指定数组长度,此时数组不属于变长数组,可以正常使用初始化列表:
#include <stdio.h> int main (){ int vettore[8] = {15,3,6,2,12,13,14,10}; printf("%d", vettore[0]); }
或者:
#include <stdio.h> int main (){ const int n = 8; int vettore[n] = {15,3,6,2,12,13,14,10}; printf("%d", vettore[0]); }
方案2:保留变量长度数组,手动赋值(适合长度需运行时确定的场景)
如果数组长度必须由变量决定,需放弃初始化列表,改用手动赋值或内存拷贝的方式填充数组:
#include <stdio.h> #include <string.h> int main (){ int n = 8; int vettore[n]; // 方式1:手动逐个赋值 vettore[0] = 15; vettore[1] = 3; vettore[2] = 6; vettore[3] = 2; vettore[4] = 12; vettore[5] = 13; vettore[6] = 14; vettore[7] = 10; // 方式2:用memcpy从临时数组拷贝 // int temp[] = {15,3,6,2,12,13,14,10}; // memcpy(vettore, temp, sizeof(temp)); printf("%d", vettore[0]); }
内容的提问来源于stack exchange,提问作者Filippo Piombino
相关产品推荐
相关产品推荐

