C ++读取串行输入到String

时间:2016-03-23 01:01:37

标签: c++ c input console serial-port

我需要从控制台获取Serial输入到String。 当用户键入" xyz"进入控制台并按下Enter键,String"输入"应定义为" 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的新手,很抱歉这段代码不好。 谢谢你的推荐, 莱纳斯

1 个答案:

答案 0 :(得分:0)

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)传递给strcpy()(如果需要)和strcat()

  3. char *参数,strcpy()strcat()数组必须是以空字符结尾的字符串。你有责任'\ 0' - 终止每个参数。虽然有几种方法可以“免费”获取,但如果您有疑问,请明确地终止它们。