我已经使用了一个数组,并希望通过在数组[0]中放置null来删除内容,但它不起作用。示例...如果我键入Jesper,则serial.print(nameBuffer [1])返回e。
我使用的临时解决方案是for循环在所有空格中放置null。
char name1[9] = "Jesper";
char nameBuffer[9];
void setup()
{
Serial.begin(9600);
}
void loop()
{
int i = 0;
nameBuffer[0] = 0;
Serial.print(nameBuffer[1]);
Serial.println(" All reset\n");
while(Serial.available() == 0)
{
// wait for data to be send
}
while(Serial.available() > 0)
{
int inByte = Serial.read();
delay(50);
nameBuffer[i] = char(inByte);
i++;
Serial.print("Recieved bytes: ");
Serial.println(inByte,DEC);
}
Serial.print("Searching for: ");
Serial.println(nameBuffer);
}
答案 0 :(得分:1)
nameBuffer
是一个包含9个char
元素的数组。这些元素中的每一个都具有char
类型的值。
将char
对象设置为0不会从数组中移除(0
或'\0'
,空字符与{a}一样有效{ {1}}值与任何其他值一样),也不会影响其后面的元素。
现在,如果您将char
的内容视为字符串(由C标准定义为“由第一个空格终止并包含第一个空格的连续字符序列
字符“),然后在nameBuffer
中存储'\0'
将使其包含空字符串。它的长度为0,但有仍然有9 nameBuffer[0]
个值存储在数组中。所以:
char
不会打印任何内容,但printf("%s", nameBuffer);
仍然是一个有效的namebuffer[1]
对象,其中包含最后存储在其中的任何值。
不要假设打印空字符或通过串行端口发送它不会做任何事情。如果你不想打印数组中的每个字符,你需要一些逻辑来避免打印你不想要的字符。
顺便提一下,您的代码似乎是C ++,而不是C.您有char
的重载版本,一个采用Serial.print
参数,一个采用char
; C不支持重载。 char*
是C ++;它是C中的语法错误。(顺便说一句,那里不需要强制转换;值会被隐式转换。)