Code ::Blocks10.05とGNUGCCコンパイラを使用しています。
基本的に、宣言されたサイズの外側で配列を初期化しようとしたときに発生する、非常に奇妙な(そして私にとっては説明のつかない)問題に遭遇しました。言い換えれば、それはこれです:
*サイズ[x][y]の宣言された配列があります。
*サイズ[y-1]の別の宣言された配列があります。
この問題は、サイズsize [y-1]
外のこの2番目の配列に値を入れようとすると発生します。[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;
}
それで、これがどのように、またはなぜ起こるのか誰かが知っていますか?