如何修复'Alrady打印最后一行元素的所有数组元素'

时间:2019-01-05 05:50:51

标签: c

永远是数组的最后一行答案...

初始化变量...

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;

1 个答案:

答案 0 :(得分:1)

这是你的问题,

int row,column;
row=0;
column=0;
// ...
int my_array[row][column];

您创建一个零乘零数组。以后再通过rowcolumnscanf赋值都没关系,因为那时您已经创建了my_array。有两种解决方案:

1。创建具有预定大小的数组。

仅此一项就可以解决您的代码问题,因为用户永远不会输入超出缓冲区的值。 (如果您是C语言的新手,并且想了解我的意思,请尝试将rowcolumn设置为25开始。您的程序可以运行。但是当您尝试通过25 x 25数组进行 操作。哦,不,代码再次中断!)。

2。使用malloc动态分配内存。

像这样声明一个二维数组:

int **my_array;

一旦您拥有row,您就会malloc(sizeof(int *) * row);,然后遍历my_array,分配列。如果这一切听起来对您来说完全陌生,我建议您查看Beej's Guide to C Programming的指针部分。祝你好运!