Использование strcmp() для STDIN_FILENO

        char buf[BUF_SIZE + 1];
        printf("[Enter Command]: \n");
        num_read = read(STDIN_FILENO, buf, BUF_SIZE);
        if (num_read == 5) {
            exit(0);
        }

Я хочу проверить, является ли пользовательский ввод строкой "exit", и выйти из программы, если это так. Приведенный выше фрагмент работает, но он завершится для всех 4-буквенных строк. Я только хочу, чтобы он вышел из строки "exit".

Я не понимаю, почему приведенный ниже код не работает:

if (strcmp("exit", buf) == 0) {
    exit(0);
}

person static    schedule 03.04.2018    source источник
comment
Что такое exit_call? Вы его нигде не определили. Вы можете рассчитывать на помощь, только если покажете все соответствующие части кода.   -  person Binarus    schedule 03.04.2018
comment
@Binarus Извините, я обновил код   -  person static    schedule 03.04.2018
comment
как это не получается?   -  person Stephen Docy    schedule 03.04.2018
comment
Вам просто нужно добавить нулевой байт после вызова read: if (num_read > 0) buf[num_read] = '\0';.   -  person P.P    schedule 03.04.2018
comment
просто добавьте '\0' в конце, заменив '\n' buf[strcspn(buf, \n)] = '\0'   -  person Nick S    schedule 03.04.2018
comment
@NickS, где именно?   -  person static    schedule 03.04.2018
comment
@static после read(), а затем используйте strcmp()   -  person Nick S    schedule 03.04.2018
comment
@static Чтобы понять, что происходит, просто используйте printf([%s]\n, buf); после чтения, и вы увидите, что строка содержит перевод строки в конце. Как вы знаете, все строки должны содержать нулевой символ терминатора в конце. Итак, вся магия заключается в замене '\n' на '\0';   -  person Nick S    schedule 03.04.2018


Ответы (1)


strcmp() не работает, так как read() не завершает ввод 0, он не выполняет ввод строки.

Используйте, например. fgets(), чтобы прочитать всю строку, затем проверьте, начинается ли она с exit (помните, что она будет содержать перевод строки).

person unwind    schedule 03.04.2018
comment
pastebin.com/rHQmRUtg - person static; 03.04.2018
comment
Я просто получаю Segmentation fault (core dumped) с этим. - person static; 03.04.2018