初始化变长数组

时间:2013-06-26 23:54:39

标签: c variable-length-array array-initialization

初始化可变长度数组编译器时会显示错误消息:

[Error] variable-sized object may not be initialized  

代码段:

int n; 
printf("Enter size of magic square: ");
scanf("%d",&n);

int board[n][n] = {0};

如何初始化可变长度数组? 为什么所有元素都没有以下面的方式初始化为0;

   int board[n][n];
   board[n][n] = {0};

3 个答案:

答案 0 :(得分:18)

任何形式的初始化语法都无法初始化。您必须以声明的方式初始值分配给数组元素,无论您喜欢哪种方式。

C11:6.7.9初始化(p2和p3):

  

初始化程序不应尝试为未初始化的实体中包含的对象提供值。

     

要初始化的实体的类型应为未知大小的数组或完整的对象类型,而不是可变长度数组类型

答案 1 :(得分:17)

您必须使用memset

memset(board, 0, sizeof board);

答案 2 :(得分:0)

1.您可以简单地按如下方式初始化数组 -

int n; 
printf("Enter size of magic square: ");
scanf("%d",&n);

int board[n][n];
for(int i=0; i<n; i++)
   for(int j=0; j<n; j++)
   {
      board[i][j] = 0;
   }
}

2。仅当您要将数组设置为“0”时才应使用 memset()