【发布时间】:2012-12-24 07:27:07
【问题描述】:
这是我的代码。我正在尝试进行字符串比较。串行输入读取按下的键并将 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);
如何使字符串比较起作用?
【问题讨论】:
-
您如何获得您的意见?可能是
fgets,然后去掉后面的换行符。 -
是的,字符串之间会有一些细微的差别。可能是尾随换行符,也可能是大小写不同。
-
strcmp()工作得很好。你有什么问题?cmd是从哪里来的?我看不出这是在哪里声明的。 -
使用
printf("'%s'\n", XXX);就很明显了。 -
您还应该确保两个字符串都为空终止。当您初始化结构时,这些字符串以空值结尾。您可以添加 '\0' 作为您键入的数组的最后一个字符。
标签: c arrays string character strcmp