Строка strcmp и массив символов в c
Вот код, который у меня есть. Я пытаюсь сделать сравнение строк. Последовательный ввод считывает, какие клавиши были нажаты, и устанавливает 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 ответа
Я нашел исправление, и теперь strcmp работает. Я изменил структуру в массиве struct. Теперь это
typedef struct {
char cmd[16];
void (*cmdFuncPtr)(void);
}CmdStruct;
Я не знаю, почему это работает, и не знаю, в чем разница. Const char *cmd, который у меня был раньше, также является способом создания "строки" в C.
Ваш cmd.command
Команды, вероятно, имеют скрытые пробелы. Удалите пробелы перед выполнением сравнений. (Спасибо Дэвиду Шварцу в комментариях!)