c中的strcmp字符串和字符数组

时间:2013-01-10 00:32:38

标签: c arrays string character strcmp

这是我的代码。我正在尝试进行字符串比较。串行输入读取按下的键,并将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);

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

2 个答案:

答案 0 :(得分:0)

您的cmd.command命令可能隐藏了尾随空格。在运行比较之前去除空格。 (感谢David Schwartz的评论!)

答案 1 :(得分:0)

我找到了修复,现在strcmp正常工作。我更改了struct数组中的struct。现在是

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

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