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

标签 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 ?
在哪里 ?是一个随机数

我很困惑为什么会发生这种情况,因为数组甚至与这个变量无关,而且似乎一切都在数组的范围内。是什么原因造成的,或者我该如何解决?

最佳答案

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

要解决这个问题,要么在 7 处结束循环,要么声明 byte a2[8];

关于c - 为什么这个 for 循环会影响外部循环的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877226/

相关文章:

c - 进行 JACK 编程测试时,我得到响应 : usage: jack_simple_client

c - ncurses 形式 : Show editing cursor/highlight active field

c - 这在 C 中允许吗?

c++ - 为什么标准字符串函数比我的自定义字符串函数更快?

c - 将指针(字符串)传递给 C 函数

更改 C 中缓冲区的播放速率?

c - 在 C 中使用 scanf() 连续读取两个字符

c - 在下面的 C 代码中出现段错误?

c - "de-referencing a NULL pointer"到底是什么意思?

c - 执行memmove(void *dst,const void *src,size_t len)后内存位置src包含什么?