我需要从控制台获取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的新手,很抱歉这段代码不好。 谢谢你的推荐, 莱纳斯
答案 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()
同样的事情更好。
即使您的编译器接受了这一点,结果代码也会以我的计数至少以三种或四种不同的方式崩溃。
你需要:
声明具有足够大小的input
和charBuffer
数组,以用于您打算使用它们。
将指针(而不是char
)传递给strcpy()
(如果需要)和strcat()
。
char *
参数,strcpy()
和strcat()
数组必须是以空字符结尾的字符串。你有责任'\ 0' - 终止每个参数。虽然有几种方法可以“免费”获取,但如果您有疑问,请明确地终止它们。