我正在研究arduino,我想储存一些来自Web服务的字符。
代码将自行解释:
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);
}
}
一切正常,所有字符都已写入。但是我需要存储所有传入的char来解析整个字符串。
你知道为什么,当我尝试储存它们时,程序停止工作,什么也不写吗?
最佳答案
必须防止缓冲区溢出。缓冲区tmp
必须以零值字节结束。tmp
是静态的,因此零填充也是静态的。使用sentinel值(BufferMaxChars
)确保缓冲区的最后一个字节以零值结尾。
我在这里猜测-但可能您想打印出用引号括起来的字符串值。如果是这样的话,tmp缓冲区将只分配一次count==1(当找到第一个引号字符时)。
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++ - 库存传入char循环功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21606412/