奇怪的输出与可变长度数组?

时间:2014-03-22 19:41:19

标签: c gcc variable-length-array

我正在打破这个问题,但无法继续,所以请帮忙。 从事编程工作:

INPUT:
First line contains a value N representing the dimension of the input matrix, followed by N lines, each line representing a row of the matrix. Within each row, N values are given and are separated by whitespace.

因此,我没有使用fgets()然后使用strtol()提取数字,而是强制使用scanf(),因为赋值平台无法正常使用strtol()。

这是我的计划:

int main()
{
   int N;
   int arr[N][N];
   int idx1, idx2=0;

   scanf("%d ",&N);

   for (idx1=0; idx1<N; idx1++) {
      for(idx2=0; idx2<N; idx2++) {
         scanf("%d", &arr[idx1][idx2]);
         printf("arr[%d][%d]=%d ", idx1, idx2, arr[idx1][idx2]);
      }
   }
   printf("\n");
   for (idx1=0; idx1<N; idx1++) {
      for(idx2=0; idx2<N; idx2++) {
         printf("arr[%d][%d]=%d ", idx1, idx2, arr[idx1][idx2]);
      }
   }

   return 0;
}

输出:

3
1 2 3
arr[0][0]=1 arr[0][1]=2 arr[0][2]=3 
4 5 6
arr[1][0]=4 arr[1][1]=5 arr[1][2]=6 
7 8 9
arr[2][0]=7 arr[2][1]=8 arr[2][2]=9 
arr[0][0]=1 arr[0][1]=4 arr[0][2]=7 arr[1][0]=4 arr[1][1]=7 arr[1][2]=8 arr[2][0]=7 arr[2][1]=8 arr[2][2]=9

FWIW gcc --version gcc(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3

为什么第二个输出与第一个输出不匹配?我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

int N;
int arr[N][N];
int idx1, idx2=0;

scanf("%d ",&N);

编写arr对象后,您必须声明N。在声明arr时,N值是不确定的。

答案 1 :(得分:-2)

如果你想创建一个这样的可变长度数组,你需要动态分配它而不是创建一个大小为N的数组(N当时有一些垃圾值),然后根据用户输入改变它的大小。使用malloc或calloc。