我正在做一项任务,尝试使用相同的结果简化代码。
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?
哪里?是一个随机数
我很困惑为什么会发生这种情况,因为数组甚至不涉及这个变量,似乎一切都在数组的范围内。可能导致这种情况的原因或我如何解决?
答案 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