【发布时间】:2016-05-07 19:39:54
【问题描述】:
我要做的就是要求输入密码并在输入长度超过 10 个字符时打印出错误消息。如果第一个输入少于 10 个字符,它会起作用。它只是打印出输入并退出程序。如果输入超过 10 个字符,则会打印错误消息并要求输入新密码,但如果第二次尝试输入少于 10 个字符,则会打印出输入,然后程序会以“Thread:1 信号”中断SIGABRT”错误。我知道我不应该使用gets,但我正试图找到一种方法让我的代码使用它。
#include <stdio.h>
#define BUFFER_LENGTH 11
int main() {
int cont;
while (1) {
char line[BUFFER_LENGTH];
char *p;
printf("Enter Password: ");
p = gets (line);
if (strlen(p)>10) {
printf("Error! Password must be shorter than 10 characters! \n");
}else{
printf(p);
printf("\n");
break;
}
}
}
【问题讨论】:
-
不要使用已从 C 标准中删除的
gets()。请改用fgets()。 -
您已为
gets分配了一个最低限度的缓冲区。如果用户输入的字符超过 10 个,则gets将写到line的末尾。如果你使用fgets,那么你可以告诉它你的缓冲区有多大,这是防止这个问题的唯一方法(使用更大的缓冲区只会降低错误的可能性)。 -
当我使用 fgets() 并且输入超过 10 个字符时,它会打印错误消息,然后将前 10 个字符之后的字符打印出来。那不是我想要的。有没有办法让 fgets() 为我的程序工作?
-
printf(p);从来没有这样做!printf("%s", p);代替。
标签: c runtime-error