我正在研究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/

10-10 07:24