我有一串字符来自串口;
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]);
我得到了一连串的角色。
我做错了什么?
答案 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::vector
和std::string
,这样可以为您节省很多麻烦。
如果您无法使用std::vector
和std::string
(显然是在Arduino上),那么快速破解就是通过替换
char* myFiles[20];
与
char myFiles[20][100];