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