首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C编译错误:“可变大小的对象可能无法初始化”

C编译错误:“可变大小的对象可能无法初始化”
EN

Stack Overflow用户
提问于 2010-06-21 15:52:21
回答 8查看 226K关注 0票数 118

为什么我收到以下代码的“可变大小的对象可能无法初始化”的错误?

代码语言:javascript
复制
int boardAux[length][length] = {{0}};
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-06-21 16:06:17

我假设您使用的是C99编译器(支持动态调整数组大小)。您代码中的问题是,当编译器看到您的变量声明时,它无法知道数组中有多少个元素(我在这里也假设,从编译器错误中可以看出,length不是一个编译时间常数)。

您必须手动初始化该数组:

代码语言:javascript
复制
int boardAux[length][length];
memset( boardAux, 0, length*length*sizeof(int) );
票数 154
EN

Stack Overflow用户

发布于 2014-11-08 17:21:38

这将产生错误:

代码语言:javascript
复制
int len;
scanf("%d",&len);
char str[len]="";

这也会产生错误:

代码语言:javascript
复制
int len=5;
char str[len]="";

但这很好用:

代码语言:javascript
复制
int len=5;
char str[len]; //so the problem lies with assignment not declaration

您需要用以下方式来赋值:

代码语言:javascript
复制
str[0]='a';
str[1]='b'; //like that; and not like str="ab";
票数 16
EN

Stack Overflow用户

发布于 2016-03-27 20:35:58

在声明数组之后

代码语言:javascript
复制
int boardAux[length][length];

将初始值赋值为零的最简单方法是使用for循环,即使它可能有点长

代码语言:javascript
复制
int i, j;
for (i = 0; i<length; i++)
{
    for (j = 0; j<length; j++)
        boardAux[i][j] = 0;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3082914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档