Строка 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 Команды, вероятно, имеют скрытые пробелы. Удалите пробелы перед выполнением сравнений. (Спасибо Дэвиду Шварцу в комментариях!)

Другие вопросы по тегам