2

这是我的代码。我正在尝试进行字符串比较。串行输入读取按下的键并将 cmd.command 设置为在键盘上键入的内容。然后我接受它并进行字符串比较,看看它是否是我列表中的命令。我坚持的是字符串比较。

typedef struct {
    const char *cmd;
    void (*cmdFuncPtr)(void);
}CmdStruct;

typedef struct {
    char command[16];
    char argument[16];
} Command;

Command cmd;

CmdStruct cmdStructArray[] = { {"led",      LEDHandler      },
                               {"relay",    RelayFunction    },  };

void ProcessCommand() {
    for (j = 0; j < sizeof(cmdStructArray)/sizeof(cmdStructArray[0]); j++) {
        if(strcmp(cmdStructArray[j].cmd, cmd.command) == 0) {
            // do stuff
        }
    }
}

如果我输入“led”,那么这两个 printf 语句会打印相同的内容。

printf(cmdStructArray[0].cmd);
printf("%s", cmd.command);

如何使字符串比较起作用?

4

2 回答 2

0

您的cmd.command命令可能有隐藏的尾随空格。在运行比较之前去掉空格。(感谢评论中的大卫施瓦茨!)

于 2013-01-10T00:40:54.637 回答
0

我找到了一个修复程序,现在 strcmp 可以工作了。我更改了结构数组中的结构。现在是

typedef struct {
    char cmd[16];
    void (*cmdFuncPtr)(void);
}CmdStruct;

我不知道为什么会这样,也不知道有什么区别。我之前的 const char *cmd 也是一种在 C 中创建“字符串”的方法。

于 2013-01-10T17:49:01.543 回答