我的代码使用gets_s()从user.If获取字符串输入,如果用户输入的字符串长度大于gets_s中指定的长度,应用程序aborts.So如何正确处理?
谢谢。
发布于 2011-06-23 21:56:32
您可以在程序开始时调用_set_invalid_parameter_handler来设置一个回调函数来处理错误,在回调函数中,您应该检查errno值。
发布于 2011-06-23 21:58:33
1) gets_s
不是一个标准函数:显然,它是微软编译器提供的一个额外函数
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? */
}
https://stackoverflow.com/questions/6455112
复制相似问题