Обрабатывать ошибку из gets_s () изящно? - PullRequest
0 голосов
/ 23 июня 2011

Мой код использует gets_s () , чтобы получить строку ввода от пользователя. Если пользователь вводит строку, длина которой больше, чем указано в gets_s, приложение прерывается.?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

1) gets_s не является стандартной функцией: по-видимому, она предоставляется компиляторами Microsoft как дополнительная

2) использование fgets, при необходимости удалите завершающий '\n', а если неттрейлинг '\n' сделка с очень длинным входом

Пример

size_t len;
char buf[1000];
if (fgets(buf, sizeof buf, stdin)) {
    buflen = strlen(buf);
    if (len) {
        if (buf[len - 1] == '\n') {
            buf[--len] = '\0'; /* adjust len and remove trailing newline */
        } else {
            /* something bad hapenned */
            if (len == sizeof buf - 1) {
                /* possibly large input */
            } else {
                /* small input */
            }
        }
    } else {
        /* no characters read at all, this is a strange occurrance */
    }
} else {
    /* fgets returned NULL: EOF on stdin? or maybe some error? */
}
2 голосов
/ 23 июня 2011

вы можете вызвать _set_invalid_parameter_handler в начале вашей программы, чтобы установить функцию обратного вызова для обработки ошибки, в функции обратного вызова вы должны проверить значение errno.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...