gpt4 book ai didi

c++ - Stock incoming char in 循环函数

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

我正在使用 arduino,我想储存一些来自网络服务的字符。代码将自行解释:

void loop() {
static int i = 0;
static int count = 0;
static char tmp[100];

if (wifly.avaible()) {
char c = wifly.read();
Serial.print(c);
tmp[i] = c;
i++;
if (c == '"')
count++;
if (count == 2)
{
Serial.print("Received : ");
Serial.println(tmp);
}
}
}

如果我只让这段代码:

void loop() {
if (wifly.avaible()) {
char c = wifly.read();
Serial.print(c);
}
}

一切正常,所有字符都已写入。但我需要存储所有传入的字符以解析整个字符串。

您知道为什么当我尝试入库时,程​​序停止工作并且什么也不写吗?

最佳答案

您必须防止缓冲区溢出。缓冲区 tmp 必须以零值字节结束。 tmp 是静态的,所以用零填充。使用标记值 (BufferMaxChars) 确保缓冲区的最后一个字节以零值终止。

我在这里猜测 - 但您可能想打印出用引号引起来的字符串值。如果是这种情况,tmp 缓冲区只会分配一次 count == 1(当找到第一个引号 char 时)。

void loop() {
const int BufferMaxChars = 100-1;
static int i = 0;
static int count = 0;
static char tmp[BufferMaxChars];

if (wifly.avaible()) {
char c = wifly.read();
Serial.print(c);
tmp[i] = c;
i++;
if (c == '"')
count++;
if (i >= BufferMaxChars || count == 2)
{
Serial.print("Received : ");
Serial.println(tmp);
}
}
}

关于c++ - Stock incoming char in 循环函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21606412/

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