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

尽管它们不是实际控制这些循环的变量,但您在打印循环中使用xand作为索引。y

在第一个打印循环中,使用jandl作为控制变量,mo第二个打印循环中使用 and。您需要使用您正在使用的任何控制变量而不是x和来索引数组y,它们是维度。

假设您输入了尺寸57尺寸。这为您提供了从arr[0][0]贯穿到arr[4][6]包容的元素。因为您使用维度来访问打印循环中的元素,所以您总是会得到arr[5][7]实际上在数组边界之外的元素。这可能只是给你一个远远超出数组末尾的值(并且由于索引不变,所以值相同),尽管从技术上讲,它是未定义的行为,所以它可以做任何事情。

一旦你开始使用正确的索引,我想你会发现memset工作正常。

于 2013-01-06T23:59:03.443 回答