C数组错误:可能无法初始化可变大小的对象

时间:2016-10-24 11:47:47

标签: c arrays

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;

它返回错误的两倍:可能无法初始化变量大小的对象。 我该如何解决这个问题?

1 个答案:

答案 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);