char a[MAX_NR_DIGITS] = {5, 2, 1, 3, 5, 0, 7, 3, 4, 4};
int sizeA = 10;
char n[MAX_NR_DIGITS] = {5, 2, 6};
int sizeN = 3;
它返回错误的两倍:可能无法初始化变量大小的对象。 我该如何解决这个问题?
答案 0 :(得分:1)
如果这些数组在本地范围内声明且MAX_NR_DIGITS
不是编译时整数常量,则C将尝试创建可变长度数组(VLA)。这是一个在运行时确定其大小的数组。
避免这种情况的最简单方法是,如果是无意的,则确保MAX_NR_DIGITS
是编译时常量,例如#define MAX_NR_DIGITS 10
。
当数组是VLA时代码不起作用的原因是初始化程序列表仅在编译时使用。因此,C语言要求说不能初始化VLA。
对于VLA,你可以通过在运行时为数组赋值来轻松解决这个问题:
memcpy(n, &(char[3]){5, 2, 6}, 3);