每当我选择列的长度超过 3 时,就会显示分段错误。它执行代码并显示“否”。正确的行数但限制了行数。列数仅为 3。 '''
#include<stdio.h>
int main()
{
int i,j,r,c;
int arr1[r][c];
printf("Enter no. of rows in the array: ");
scanf("%d",&r);
printf("Enter no. of columns in the array: ");
scanf("%d",&c);
printf("Enter elements in %dX%d array:\n",r,c);
for ( i = 0; i < r; i++)
{
for ( j = 0; j < c; j++)
{
scanf("%d",&arr1[i][j]);
}
}
printf("Your entered array is:\n");
for ( i = 0; i < r; i++)
{
for ( j = 0; j < c; j++)
{
printf("%d ",arr1[i][j]);
}
printf("\n");
}
printf("Transpose of the array is:\n");
for ( i = 0; i < c; i++)
{
for ( j = 0; j < r; j++)
{
printf("%d ",arr1[j][i]);
}
printf("\n");
}
}
'''
main()
中的前两行代码是未定义的行为。
int i,j,r,c;
int arr1[r][c];
r
和 c
均未初始化,但您使用它们来创建二维数组 arr1
。 r
和 c
将包含一些垃圾值,可以是任何整数。如果它们为负数或 0
,则创建 arr1
将失败。如果它们是正值但非常大,创建 arr1
也可能会失败。
声明变量后,使用
scanf()
来初始化它们,但数组已经创建,因此需要切换顺序。首先创建 r
和 c
,然后从 scanf()
获取用户输入并用它初始化它们,然后创建二维数组 arr1
。