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

标签 c++ c web-services arduino

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

相关文章:

java - 如何从 Java Rest 服务响应中解析 java 中的 XML

web-services - 我们应该对 Web 服务进行单元测试吗?

c++ - 多线程 - 类中的异步线程

c++ - 我们可以在运行时检查动态数组的大小吗

c++ - 在 C++ 中嵌入 Lua : Accessing C++ created through Lua, 回到 C++(或将结果从 Lua 返回到 C++)

c++ - 如何使用 Visual Studio 2010 Professional 中的 C++ - 我只看到 C# 和 F# 的模板

CMake 无法识别 C 包含

c++ - 如何在 C++ 中将 char 转换为 int? (文件处理)

c - 将数组传递给 C 中的多个函数

ios - 存折无法连接到开发 Web 服务