使用命令行参数和c语言动态内存分配的二维数组



我想创建一个2D数组,其中行数和列数由命令行参数获取。然后使用动态内存分配生成数组,其中用户提供输入。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, int *argv[]) {
int **arr;
arr = (int **)malloc(*argv[1]*sizeof(int*));

for (int i=0; i<argv[1]; i++)
arr[i] = (int *)malloc (*argv[2]*sizeof(int));

for (int i=0; i<argv[1]; i++)
for (int j=0; i<argv[2]; j++)
scanf("%d", &arr[i][j]);

for (int i=0; i<argv[1]; i++){
for (int j=0; i<argv[2]; j++)
printf("%d ",arr[i][j]);
printf("n");}

return 0;
}

然而,我得到分段转储每次我运行这个。你能解释一下我哪里做错了吗?

您的main签名不正确。参数是作为指向string的指针数组提供的,因此要获得row/col,您需要将字符串转换为int,例如使用atoi()

在调用scanf时,在循环的第二部分使用i也有错误。

我已经做了下面的更正,并添加了一些小的变化,以清晰。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int **arr;
if (argc < 3) {
printf("must supply 2 integer argumentsn");
return -1;
}

int rows = atoi(argv[1]);
int cols = atoi(argv[2]);

printf("rows=%d, cols=%dn", rows, cols);
arr = (int **)malloc(rows*sizeof(int*));

for (int i=0; i<rows; i++)
arr[i] = (int *)malloc (cols*sizeof(int));

for (int i=0; i<rows; i++) {
for (int j=0; j<cols; j++) {
printf("Value for row %d col %d: ", i+1, j+1);
scanf("%d", &arr[i][j]);
}
}

for (int i=0; i<rows; i++) {
for (int j=0; j<cols; j++) {
printf("%d ",arr[i][j]);
}
printf("n");

}

return 0;
}

使用数组指针

int main(int argc, char *argv[]) 
{

int rows = atoi(argv[1]);
int cols = atoi(argv[2]);
int (*arr)[cols] = malloc(rows * sizeof(*arr));

}