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

C++ read Serial input to String

本文关键字:字符串 输入 读取 C++      更新时间:2023-10-16

我需要将串行输入从控制台获取到字符串。当用户在控制台中键入"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 *参数。

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

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

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

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

您需要:

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

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

  3. char * strcpy()strcat() 数组的参数必须是以 null 结尾的字符串。您有责任终止每个参数"\0"。尽管有几种方法可以"免费"获得此内容,但如果您有疑问,请明确 0 终止它们。