代码之家  ›  专栏  ›  技术社区  ›  Bob Jones

比较C char和char*[已关闭]

  •  0
  • Bob Jones  · 技术社区  · 7 年前

    我有一个二维数组(commandNames}),我正在搜索该数组以查找与从Arduino串行输入读取的单个字符的匹配。比较代码不起作用。

    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...
    

    行“if(command==(char)cmd)”是问题所在。

    1 回复  |  直到 7 年前
        1
  •  2
  •   iBug    7 年前

    似乎您只是在比较sorta输入中给定的字符与1字符字符串。因此,只需取消引用指针并比较字符:

    command == *cmd
               ^
    

    从那以后 cmd 属于类型 char* ,没有必要再进行类型转换,所以我放弃了类型转换( (char) ).

    xander noted in comments , char cmd = commandNames[i][1][0] 在可读性方面更好。

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