我发现自己再次被 C 字符串、字符等弄糊涂了。
这是我用来测试 Arduino 语法的一些代码。我知道 (*message)buff 会给我一个指针(我仍然不知道为什么我需要使用指针,但我可以对此进行一些研究!),我将 *message_buff 转换为字符串(仅用于有事做,但请注意,稍后当我尝试将此字符串打印到串行时,我只会得到一个“c”字符)。
我设置了一个数组指针三个元素长(三个字节长??我真的不知道):
char *mqtt_command[3] = {};
稍后当我尝试使用以下方法向数组添加值时:
*mqtt_command[i] = str;
我得到错误:
错误:从 'char*' 到 '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 传入一个命令字符串(我认为它是一个字符串,也许它是一个 char 数组????),消息是:
command:range:1
当收到 MQTT 消息时,我正在尝试构建一个小协议来在 Arduino 上执行操作。我可以很好地处理 MQTT 回调,这不是问题。问题是我不太了解 C 字符串和字符。我希望能够处理以下命令:
command:range:0
command:digital:8
read:sensor:2
等等