1
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;
它返回两倍的错误:可变大小的对象可能未初始化。 我该如何解决这个问题?C数组错误:可变大小的对象可能未被初始化
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;
它返回两倍的错误:可变大小的对象可能未初始化。 我该如何解决这个问题?C数组错误:可变大小的对象可能未被初始化
如果这些数组在本地作用域声明,并且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);
什么是'MAX_NR_DIGITS'?你从哪里得到错误?你可以请尝试一个[最小,完整和可验证的例子](http://stackoverflow.com/help/mcve)并告诉我们?并且在构建时包含完整且完整且未经编辑的错误输出? –
你使用什么开发环境? –
我想'MAX_NR_DIGITS'不是一个常量。这只是一个_guess_因为你不告诉我们什么'MAX_NR_DIGITS'是 –