初始化可变长度数组

在初始化变长数组时,编译器给出一个错误信息:

[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}; 

VLA不能通过任何forms的初始化语法进行初始化。 无论您喜欢什么方式,您都必须在声明后将初始值分配给您的数组元素。

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

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

要初始化的实体的types应该是未知大小的数组或不是可变长度数组types的完整对象types

你将不得不使用memset

 memset(board, 0, sizeof board); 

如果你想使用VLA,你必须删除初始化{0}

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

你可以简单地初始化数组,如下所示 –

 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()