数组点0不会重置内容

时间:2014-12-29 18:31:22

标签: c arrays

我已经使用了一个数组,并希望通过在数组[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);
}

1 个答案:

答案 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中的语法错误。(顺便说一句,那里不需要强制转换;值会被隐式转换。)