C++ 读取串口输入到字符串

C++ read Serial input to String

我需要将串行输入从控制台获取到一个字符串。 当用户在控制台中键入 "xyz" 并按回车键时,字符串 "input" 应定义为 "xyz"。从那时起,我将解释字符串。 这是我目前拥有的:

定义:

char input[] = {0};
char bufferChar[] = {0};

使用:

bool canInput = true;
while(canInput == true) {
  if(Serial.available() > 0) {
    char bufferChar2 = Serial.read();
    bufferChar[1] = bufferChar2;
    strcpy(input[1], input[1]);
    strcat(input[1], bufferChar[1]);
    Serial.print(input);
    tft.print(input);
  }
}

我是 c 的新手,如果这段代码不好,我深表歉意。 在此先感谢, 林纳斯

char bufferChar[] = {0};

这声明了一个只有一个元素的数组。

bufferChar[1] = bufferChar2;

这试图设置单元素数组中第二个元素的值。缓冲区溢出。未定义的行为。

strcpy(input[1], input[1]);

这毫无意义。除了想要 strcpy() 自身之上的东西背后的可疑原因之外,input 是一个 char 数组,所以 input[1] 是一个单一的 char 值,而 strcpy() 需要 char * 个参数。

这一行一定让您的编译器发出了一堆警告 and/or 错误。请不要忽略来自编译器的诊断消息。那是编译器告诉你你做错了。

strcat(input[1], bufferChar[1]);

因此,我们正在尝试 strcat() 另一对 char 而不是 char *。这不会比尝试 strcpy() 做同样的事情更好。

即使您的编译器接受这个,根据我的统计,生成的代码至少会以三到四种不同的方式崩溃。

您需要:

  1. 声明 inputcharBuffer 数组,它们的大小足以满足您打算对它们执行的操作。

  2. 将指针而不是 char 传递给 strcpy()(如果需要)和 strcat().

  3. char * 参数,strcpy()strcat() 数组必须是空终止字符串。您有责任以“\0”结束每个参数。虽然有几种方法可以获得此 "for free",但如果您有疑问,请明确地以 0 终止它们。