永远是数组的最后一行答案...
初始化变量...
int row,column;
row=0;
column=0;
int i,j;
i=0,j=0;
int my_array[row][column];
int sum=0;
用户可以输入数组值...
printf("enter row values & column value:\n ");
printf("row value i :");
scanf("%d",&i);
printf("column value :");
scanf("%d",&j);
printf("Set the values...\n");
printf("\n");
获取数组的值...
for(row=0;row<=i-1;row++)
{
for(column=0;column<=j-1;column++)
{
printf("Enter value for my_array[%d][%d] :",row,column);
scanf("%d",&my_array[row][column]);
}
}
打印数组。...
for(row=0;row<=i-1;row++)
{
for(column=0;column<=j-1;column++)
{
printf("%d ",my_array[row][column]);
}
printf("\n");
}
//end of the code
return 0;
答案 0 :(得分:1)
这是你的问题,
int row,column;
row=0;
column=0;
// ...
int my_array[row][column];
您创建一个零乘零数组。以后再通过row
向column
和scanf
赋值都没关系,因为那时您已经创建了my_array
。有两种解决方案:
1。创建具有预定大小的数组。
仅此一项就可以解决您的代码问题,因为用户永远不会输入超出缓冲区的值。 (如果您是C语言的新手,并且想了解我的意思,请尝试将row
和column
设置为25开始。您的程序可以运行。但是当您尝试通过25 x 25数组进行 操作。哦,不,代码再次中断!)。
2。使用malloc
动态分配内存。
像这样声明一个二维数组:
int **my_array;
一旦您拥有row
,您就会malloc(sizeof(int *) * row);
,然后遍历my_array
,分配列。如果这一切听起来对您来说完全陌生,我建议您查看Beej's Guide to C Programming的指针部分。祝你好运!