如何在数组中存储字符流?

时间:2013-09-16 21:24:58

标签: c++ arduino

我有一串字符来自串口;

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]);

我得到了一连串的角色。

我做错了什么?

1 个答案:

答案 0 :(得分: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::vectorstd::string,这样可以为您节省很多麻烦。

如果您无法使用std::vectorstd::string(显然是在Arduino上),那么快速破解就是通过替换

为字符串预分配一定量的内存
char* myFiles[20];

char myFiles[20][100];