gpt4 book ai didi

c - Arduino 字符串、字符和指针等

转载 作者:太空狗 更新时间:2023-10-29 16:02:21 26 4
gpt4 key购买 nike

我发现自己又被 C 字符串、字符等搞糊涂了。

这是我用来测试 Arduino 语法的一些代码。我知道 (*message)buff 会给我一个指针(我仍然不知道为什么我需要使用指针,但我可以对此做一些研究!),我将 *message_buff 转换为一个字符串(只是为了有事可做,但请注意,稍后当我尝试将此字符串打印到序列号时,我只会得到一个“c”字符)。

我设置了一个数组指针三个元素长(三个字节长??我真的不知道):

char *mqtt_command[3] = {};

稍后,当我尝试使用以下方法向数组添加一个值时:

*mqtt_command[i] = str;

我得到错误:

error: invalid conversion from 'char*' to 'char'

如果我将其更改为:

mqtt_command[i] = str;

(没有 *)它编译得很好。我不知道为什么...

这是我的代码:

char *message_buff = "command:range:1";
char *str;
String msgString = String(*message_buff);
char *mqtt_command[3] = {};
int i = 0;

void setup()
{
Serial.begin(9600);
delay(500);

while ((str = strtok_r(message_buff, ":", &message_buff)) != NULL)
{
Serial.println(str);
mqtt_command[i] = str;
i++;
}

delay(1000);

Serial.print("Command: ");
Serial.println(mqtt_command[1]);

Serial.print("MQTT string: ");
Serial.println(msgString);
}

void loop()
{
// Do something here later
}

这是输出:

command
range
1
Command: range
MQTT string: c

如何理解字符、字符串、指针和字符数组?我在哪里可以找到有关该主题的全面教程?

我正在通过 MQTT 传递一个命令字符串(我认为它是一个字符串,也许它是一个字符数组????),消息是:

command:range:1

我正在尝试构建一个小协议(protocol),以便在收到 MQTT 消息时在 Arduino 上执行操作。我可以很好地处理 MQTT 回调,这不是问题。问题是我不太了解 C 字符串和字符。我希望能够处理如下命令:

command:range:0
command:digital:8
read:sensor:2

等等

最佳答案

您首先需要 C(和/或 C++)入门,您需要更多地了解声明和指针访问语法等。

这个:

char *mqtt_command[3] = {};

表示“mqtt_command 是一个包含 3 个 char * 的数组”,即三个指向字符的指针。由于字符串表示为指向字符的指针,因此这可以称为“三个字符串的数组”。虽然角色本身没有实际的空间,因此这还不够,但这是一个好的开始。

然后,您的第一个错误是这段代码:

*mqtt_command[i] = str;

编译器提示的问题是你取消引用的次数太多了。只需 mqtt_command[i] 就足够了,计算结果为数组的第 i 个值,类型为 char *。然后,您的初始星号取消引用该指针,这意味着左侧表达式的类型现在是char,即它是单个字符。您不能将指针分配给一个字符,它(通常)不适合。

删除初始星号以解决此问题。

进一步分析,这个:

char *message_buff = "command:range:1";
String msgString = String(*message_buff);

也是错误的,原因相同。您正在取消引用 message_buff 指针,因此 String() 构造函数的参数只是第一个字符,即 c。再次,去掉初始星号,你的意思是:

String msgString = String(message_buf);

可以这样写:

String msgString(message_buf);

关于c - Arduino 字符串、字符和指针等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14436791/

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