正确处理gets_s()的错误?

时间:2011-06-23 13:50:07

标签: c error-handling

我的代码使用gets_s()来获取用户输入的字符串。如果用户输入的长度大于gets_s中指定的字符串,则应用程序将中止。那么如何优雅地处理它?<​​/ p >

感谢。

2 个答案:

答案 0 :(得分:3)

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? */
}

答案 1 :(得分:2)

您可以在程序开头调用_set_invalid_parameter_handler来设置回调函数来处理错误,在回调函数中,您应该检查errno的值。