gpt4 book ai didi

c++缓冲区溢出或损坏的变量

转载 作者:太空宇宙 更新时间:2023-11-04 15:30:30 25 4
gpt4 key购买 nike

当传递意外消息时,这段代码会导致缓冲区溢出吗?此外,预期的消息是简单的“1”和“-1”。

char rcv[64] {};
int i = 0;
while (modem.available()) {
rcv[i++] = (char)modem.read();
}
String data_received = rcv;
if (data_received == "") {
Serial.println("Null");
} else {
correction_var = data_received.toInt();
}

自从我的 arduino 的 RTC 突然开始表现奇怪,我找不到合适的原因,除了在他发疯之前显然没有向 Arduino 发送消息。此处的这段代码处理接收到的消息,所以可能有些东西超出了它应该拥有的范围并弄乱了 RTC 的警报变量?

更新:所以这些都不是缓冲区溢出问题,Ardunino 的 RTC 显然有某种问题,因为即使在重置代码后,问题仍然存在,这次是从一开始,所以我决定创建一个新的线程 Here .

最佳答案

您只是在读取无限量的值,而不检查您的缓冲区是否已满。从您的代码:

char rcv[64] {};
int i = 0;
while (modem.available()) {
rcv[i++] = (char)modem.read();
}

很明显,您的字符数组 rcv 在接收到 64 个字符后会溢出。也许您应该在接收缓冲区满后停止阅读?

char rcv[64] {};
int i = 0;
while (modem.available() && i < 64) {
rcv[i++] = (char)modem.read();
}

或者您可以在读取新值后覆盖最旧的值。

char rcv[64] {};
int i = 0;
while (modem.available()) {
rcv[i % 64] = (char)modem.read();
++i;
}

关于c++缓冲区溢出或损坏的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54767297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com