【发布时间】:2013-01-04 09:34:02
【问题描述】:
我发现自己又被 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
等等
【问题讨论】:
-
获取并阅读一本关于 C 的好书。
-
在真正的计算机上学习 C,然后再尝试了解在哈佛架构微控制器上工作的额外复杂性。