我正在使用 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/