1

我有一个像这样从串口传来的字符流;

FILE1,FILE2,FILE3,

我正在尝试像这样阅读它们;

char* myFiles[20];
boolean done = false;
int fileNum = 0;
int charPos = 0;
char character;
while (!done)
{
  if (Serial.available())
  {
    character = Serial.read();
    if ((character == '\n') || (character == '\r'))
    {
      done = true;
    }
    else if (character == ',')
    {
      myFiles[fileNum][charPos] = '\0';
      fileNum++;
      charPos = 0;
    }
    else
    {
      myFiles[fileNum][charPos] = character;
      charPos++;
    }
  }
}

当我尝试像这样打印第一个值时;

Serial.println(myFiles[0]);

我得到一个连续的字符流。

我究竟做错了什么?

4

1 回答 1

4

你做错的是没有为你的字符串分配任何内存。

这是执行此操作的一种方法

#include <vector>
#include <string>

std::vector<std::string> myFiles;
std::string file;
bool done = false;
char character;
while (!done)
{
  if (Serial.available())
  {
    character = Serial.read();
    if ((character == '\n') || (character == '\r'))
    {
      done = true;
    }
    else if (character == ',')
    {
      myfiles.push_back(file);
      file = "";
    }
    else
    {
      file += character;
    }
  }
}

Serial.println(myFiles[0].c_str());

由于您使用 C++ 编程,因此您应该学习如何使用std::vectorand std::string,它们将为您省去很多麻烦。

如果您无法使用(显然在 Arduino 上如此) std::vectorstd::string那么快速破解方法是通过替换为您的字符串预分配固定数量的内存

char* myFiles[20];

char myFiles[20][100];
于 2013-09-16T21:36:40.420 回答