1 2 3 4 Main.c: In function ‘main’: Main.c:6:2: error: variable-sized object may not be initialized int c[n][m]={}; ^ 辅助解释:
时间: 2024-09-24 21:02:03 浏览: 34
Strategies for small and medium-sized U.S. businesses investing in China: Lessons from Taiwanese companies
在C语言中,`int c[n][m]={};`这样的初始化语法有问题,特别是在`main()`函数中。当你试图使用变量`n`和`m`来定义一个多维数组的大小时,这被称为“变长数组”(Variable-Length Arrays,VLA),但在现代C99及以后的标准中,变长数组是不允许在所有存储类别(如栈上)直接初始化的。
这个错误提示告诉你,由于`n`和`m`是在运行时确定的,编译器无法提前计算数组的确切大小,所以不能这样初始化。你应该先定义`n`和`m`,然后根据它们的值来动态分配内存,例如:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, m; // 先声明变量n和m
printf("Enter the number of rows and columns: ");
scanf("%d %d", &n, &m); // 获取输入的n和m值
// 动态分配内存
int (*arr)[m] = malloc(n * sizeof(*arr)); // 使用sizeof运算符得到每个行的大小
if (arr == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
// 初始化数组
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = 0; // 或者从用户输入获取初始值
}
}
// ...其他操作...
free(arr); // 释放内存
return 0;
}
```
在这个例子中,我们首先获取用户输入的`n`和`m`,然后用`malloc()`动态分配了大小为`n*m`的二维数组。这样就可以避免使用变长数组带来的问题。
阅读全文