Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在数组中存储字符流?_C++_Arduino - Fatal编程技术网

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

C++ 如何在数组中存储字符流?,c++,arduino,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 =

我有一个字符流通过串口传输,就像这样

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]);
我试着像这样读懂他们

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]);
当我试图像这样打印第一个值时

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]);
我得到了连续不断的字符流


我做错了什么?

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

这里有一种方法可以做到这一点

#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());


错误的是没有为字符串分配任何内存

这里有一种方法可以做到这一点

#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());


std::vector和std::string在Arduino.Hmm上不可用,这很不幸。然后,快速的破解方法是替换
char*myFiles[20]带有
字符myFiles[20][100]在原始代码中。更好的解决方案是使用malloc、realloc等类似C的代码,将其更改为char myFiles[20][100];如果你把它作为一个答案,那么我可以接受。std::vector和std::string在Arduino上不可用。嗯,这很不幸。然后,快速的破解方法是替换
char*myFiles[20]带有
字符myFiles[20][100]在原始代码中。更好的解决方案是使用malloc、realloc等类似C的代码,将其更改为char myFiles[20][100];有效,所以如果你加上这个作为答案,我可以接受。