c - 带有可变长度数组的奇怪输出?

标签 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.

因此,我不得不使用 scanf() 而不是使用 fgets() 然后使用 strtol() 提取数字,因为赋值平台不能与 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

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

最佳答案

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

scanf("%d ",&N);

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

关于c - 带有可变长度数组的奇怪输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22582592/

相关文章:

c - GCC: 'multiple definition' gcc 4.8 版本问题

c++ - GCC 上虚拟继承行为的奇怪默认空构造函数

c - 动态分配内存有必要用new吗?

c - 数组类型和使用 malloc 分配的数组之间的区别

c - LabVIEW 中的错误像素校正?

gcc - 如何解决交叉编译中的crt0.o链接问题?

C函数签名问题

c - 调用约定会阻止可变大小的返回值吗?

c - 使用 libevdev 跟踪多次触地/向上

python - 使用 C 将 numpy 数组对象拆分为两个不同大小的 vector