为什么这个for循环会影响变量外部循环?

时间:2012-03-26 17:59:10

标签: c

我正在做一项任务,尝试使用相同的结果简化代码。

unsigned char x=5;
byte a1[100];
/*byte a1 is then filled*/
byte a2[7];
int counter = 0;

for (counter=0;counter!=8;counter++)
{
a2[counter]=a1[counter];
printf("%d ",x);
}

结果是5 5 5 5 5 5 5?
哪里?是一个随机数

我很困惑为什么会发生这种情况,因为数组甚至不涉及这个变量,似乎一切都在数组的范围内。可能导致这种情况的原因或我如何解决?

3 个答案:

答案 0 :(得分:4)

你正在写完数组的末尾。写入a2[7]是未定义的行为(在您的情况下,它在堆栈上的数组之后立即写入变量)。

要解决此问题,请将循环结束为7或声明byte a2[8];

答案 1 :(得分:0)

正如詹姆斯所说,你可能想写:

for (counter = 0; counter < 7; counter++)
{
    a2[counter] = a1[counter];
    printf("%d ", x);
}

答案 2 :(得分:0)

你宣布

byte a1 = [100];

这不是一个数组,而是说单个字节等于[100]。我不确定为什么它会为你编译,这不是一个声明值的有效方法。

无论如何,它应该是

byte a1[100];

此外,正如其他人所指出的那样,你循环遍历数组的末尾。

如果你不确定为什么,一个7字节的数组从0开始计数。所以有这些位置:

0 1 2 3 4 5 6

没有位置7