我正在使用 Code::Blocks 10.05 和 GNU GCC 编译器。
基本上,当尝试在声明的大小之外初始化数组时,我遇到了一个非常奇怪(对我来说,莫名其妙)的问题。简而言之,就是这样:
*有一个大小为 [x][y] 的声明数组。
*还有另一个大小为 [y-1] 的声明数组。
尝试将值放入第二个size [y-1]
数组中时会出现问题,该数组超出了[y-1]
大小。尝试此操作时,第一个数组[x][y]
将不再保留其所有值。我根本不明白为什么破坏(或试图破坏)一个数组会影响另一个数组的内容。这是一些示例代码,可以查看它的发生情况(它的格式已损坏。要查看问题消失,只需更改array2[4]
为array2[5]
(从而消除了我指出的问题)。
#include <stdio.h>
int main(void)
{
//Declare the array/indices
char array[10][5];
int array2[4]; //to see it work (and verify the issue), change 4 to 5
int i, j;
//Set up use of an input text file to fill the array
FILE *ifp;
ifp = fopen("input.txt", "r");
//Fill the array
for (i = 0; i <= 9; i++)
{
for (j = 0; j <= 5; j++)
{
fscanf(ifp, "%c", &array[i][j]);
//printf("[%d][%d] = %c\n", i, j, array[i][j]);
}
}
for (j = 4; j >= 0; j--)
{
for (i = 0; i <= 9; i++)
{
printf("[%d][%d] = %c\n", i, j, array[i][j]);
}
//PROBLEM LINE*************
array2[j] = 5;
}
fclose(ifp);
return 0;
}
那么有谁知道这是如何发生或为什么发生的?