gpt4 book ai didi

c - 数组点0不重置内容

转载 作者:行者123 更新时间:2023-11-30 15:25:48 24 4
gpt4 key购买 nike

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

最佳答案

nameBuffer 是一个包含 9 个 char 元素的数组。每个元素都有一个 char 类型的值。

char 对象设置为 0 不会将其从数组中删除(0'\0'(空字符)与其他任何 char 值一样有效),也不会影响其后面的元素。

现在,如果您将 nameBuffer 的内容视为字符串(由 C 标准定义为“以第一个 null 结尾并包含第一个 null 的连续字符序列”)字符”),然后将 '\0' 存储在 nameBuffer[0] 中将导致它包含一个空字符串。它有一个 length 为 0,但数组中仍存储 9 个 char 值。因此:

printf("%s", nameBuffer);

不会打印任何内容,但 namebuffer[1] 仍然是一个有效的 char 对象,包含最后存储在其中的任何值。

不要认为打印空字符或通过串行端口发送它不会执行任何操作。如果您不想打印数组中的每个字符,则需要一些逻辑来避免打印您不需要的字符。

顺便说一句,您的代码似乎是 C++,而不是 C。您有 Serial.print 的重载版本,一个采用 char 参数,另一个采用 字符*; C 不支持重载。而 char(inByte) 是 C++;这是 C 中的语法错误。(顺便说一句,那里不需要强制转换;该值将隐式转换。)

关于c - 数组点0不重置内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27694094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com