C 数组值在循环中重置

C 数组值在循环中重置,c,C,因此,我使用poll()读取了几个gpio引脚。然后,我将以前读取的值与新读取的值进行比较,以查看它们是否已更改。价值观的解读效果很好。我的问题似乎在循环中。这可以从输出中看出,在循环开始时,buffers被重置。为什么会这样 注意:如果有人想知道为什么我不直接使用poll()作为延迟为-1的中断,那是因为硬件问题使它不受支持 代码 这一行似乎有风险: strcpy(prev_buffers[i], buffers[i]); prev\u buffers[i]只有2个字节长。如果buffers

因此,我使用
poll()
读取了几个gpio引脚。然后,我将以前读取的值与新读取的值进行比较,以查看它们是否已更改。价值观的解读效果很好。我的问题似乎在循环中。这可以从输出中看出,在循环开始时,
buffers
被重置。为什么会这样

注意:如果有人想知道为什么我不直接使用
poll()
作为延迟为
-1
的中断,那是因为硬件问题使它不受支持

代码 这一行似乎有风险:

strcpy(prev_buffers[i], buffers[i]);
prev\u buffers[i]
只有2个字节长。如果
buffers[i]
有超过1个字符,则会出现缓冲区溢出并调用未定义行为

此外,您必须初始化
缓冲区,它们当前以随机垃圾而不是单字节字符串开头:使用
strcpy
保存以前的值会调用未定义的行为。使用
memcpy()
保存以前的内容风险较小,因为它只会复制2个字节,而不是扫描缓冲区以查找空终止符,在读取超过
buffers[i]
的结尾和写入超过
prev\u buffers[i]
的结尾时,都可能调用未定义的行为

您确定
read(fds[i],buffers[i],sizeof buffers[i])读取ASCII数字和空终止符?如果不是,则代码不正确


发布完整的编译函数后,可能会出现更多问题。

什么是strcopy
?同上。使用
memcpy
。由于传入的数据不是以nulchar结尾的字符串数据,因此需要。。请下次再发真实代码。显然
read(fds[i]、buffers[i]、sizeof buffers[i];
也不编译。(或者编译器是否以某种方式从以太合成了闭包?)。它只适用于以null结尾的字符串。我确信它们只有1个字符长。这行定义了问题,尽管它没有读取null结尾符,这就是问题所在。更新答案,我将很乐意接受。顺便说一句,我不认为缺少括号是一个大问题。在初始化循环之前也会执行伪读取缓冲区。我试图发布尽可能少的代码,也许我应该包含更多。@StephanGM:最好发布一个完整的可编译示例来展示问题。错误往往隐藏在看似无辜的代码中。我已经添加了其余部分
at top: prev:00 buff:01
in loop: prev:01 buff:00
in loop: prev:00 buff:00
at top: prev:00 buff:01
in loop: prev:01 buff:00
in loop: prev:00 buff:00
strcpy(prev_buffers[i], buffers[i]);