这是我的代码。我正在尝试进行字符串比较。串行输入读取按下的键,并将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);
如何让字符串比较起作用?
答案 0 :(得分:0)
您的cmd.command
命令可能隐藏了尾随空格。在运行比较之前去除空格。 (感谢David Schwartz的评论!)
答案 1 :(得分:0)
我找到了修复,现在strcmp正常工作。我更改了struct数组中的struct。现在是
typedef struct {
char cmd[16];
void (*cmdFuncPtr)(void);
}CmdStruct;
我不知道为什么会这样,并且不知道有什么区别。我之前使用的const char * cmd也是一种在C中创建“字符串”的方法。