0

これはコードです

int x, y, n, i, j, l, m, o;
printf ("podaj szerokosc planszy na jakiej chcesz zagrac\n");
scanf ("%d", &x);
printf ("podaj dlugosc planszy na jakiej chcesz zagrac\n");
scanf ("%d", &y);
int plansza [x][y];
memset(plansza, 0, sizeof plansza);
int plansza2 [x][y];
memset(plansza2, 0, sizeof plansza2);

printf("plansza: \n");
for(j=0;j<x;j++)
{
    for(l=0;l<y;l++)
    {
        printf("%d",plansza[x][y]);
        printf(" ");
    }
    printf("\n");
}

printf("plansza2: \n");
for(m=0;m<x;m++)
{
    for(o=0;o<y;o++)
    {
        printf("%d",plansza2[x][y]);
        printf(" ");
    }
    printf("\n");
}

そしてこれが結果です:
結果

なぜmemset()まったく機能しないのかわからない、そして私は完全に理由を知らない。配列をすべてゼロで埋めるにはどうすればよいですか?

4

1 に答える 1

7

印刷ループは実際にそれらのループを制御する変数ではないという事実にもかかわらず、印刷ループ内でインデックスとして使用xしています。y

最初の印刷ループでは、とを制御変数として使用jし、l2番目の印刷ループではとを使用します。次元であるandではなく、使用している制御変数を使用して配列にインデックスを付ける必要があります。moxy

5入力したとしましょう7arr[0][0]これにより、からarr[4][6]包括的までの要素が得られます。ディメンションを使用して印刷ループ内の要素にアクセスしているためarr[5][7]、実際には配列の範囲外にある要素を常に取得できます。これにより、配列の末尾をはるかに超える値(およびインデックスが変更されていないため同じ値)が得られる可能性がありますが、技術的には未定義の動作であるため、何でも実行できます。

正しいインデックスを使い始めると、うまく機能することがわかると思いますmemset

于 2013-01-06T23:59:03.443 に答える