比较C char和char *

时间:2018-02-21 09:02:02

标签: c arduino compare

我有一个二维数组(commandNames),我正在寻找一个匹配单个字符串,从Arduino Serial输入读取。比较代码不工作。

const char* commandNames[COMMAND_COUNT][4] = {
    { "STOP",           "p", "M", "0" },
    { "STOP LEFT",      "s", "M", "9" },
    { "STOP RIGHT",     "S", "M", "10" },
    { "FORWARD",        "f", "M", "1" },
...
};

char command = Serial.read();
for (int i = 0; i < COMMAND_COUNT; i++) {
    char *cmd = (char*)commandNames[i][1];
    if (command == (char)cmd) { <-- Need help with this line 
... we have a match...

行&#34; if(command ==(char)cmd)&#34;是问题。

1 个答案:

答案 0 :(得分:1)

您似乎只是将sorta输入中给出的字符与1-char字符串进行比较。所以你只需取消引用指针并比较字符:

command == *cmd
           ^

由于cmd属于char*类型,因此无需再次进行类型转换,因此我放弃了转换((char))。

作为xander noted in commentschar cmd = commandNames[i][1][0]在可读性方面更胜一筹。

作为旁注,char *cmd = (char*)commandNames[i][1]是一些危险的代码。您将指向字符串文字的指针转换为可修改的指针(删除const修饰符)。由于您不需要修改cmd,因此最好将其声明并定义为const char*,并将转换放在右侧(RHS)。