2016-10-24 87 views
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数组错误:可变大小的对象可能未被初始化

+2

什么是'MAX_NR_DIGITS'?你从哪里得到错误?你可以请尝试一个[最小,完整和可验证的例子](http://stackoverflow.com/help/mcve)并告诉我们?并且在构建时包含完整且完整且未经编辑的错误输出? –

+0

你使用什么开发环境? –

+1

我想'MAX_NR_DIGITS'不是一个常量。这只是一个_guess_因为你不告诉我们什么'MAX_NR_DIGITS'是 –

回答

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); 
相关问题