Как уже говорили другие, сравнивать с "exit"
не удается, потому что fgets()
включил новую строку в буфер. Одна из гарантий заключается в том, что буфер заканчивается новой строкой, если только введенная строка не слишком длинна для буфера, и в этом случае она не заканчивается новой строкой. fgets()
также гарантирует, что буфер будет нулевым, поэтому вам не нужно обнулять 256 байтов, а только позволить fgets()
использовать 255 для получения этой гарантии.
Простой ответ по сравнению с "exit\n"
требовал, чтобы пользователь случайно не добавил пробел перед или после слова. Это может не иметь значения, если вы хотите заставить пользователя быть осторожным с командой exit , но в целом может вызывать раздражение пользователя.
Использование strncmp()
потенциально позволяет "exited"
, "exit42"
и другим совпадениям там, где вы, возможно, их не хотите. Это может сработать против вас, особенно если некоторые допустимые команды являются префиксными строками других допустимых команд.
В общем случае, часто хорошей идеей является разделение операций ввода-вывода, токенизации, анализа и действий на их собственные фазы.