我正在尝试在C中进行简单的用户和密码验证。 我被告知在获取输入时从不使用gets()而应该使用fgets()。 但是我不确定fgets()是如何工作的,或者为什么给我这个输入。 这是代码。
#include <stdio.h>
#include <string.h>
int login(char *user, char *passwd){
int enter = 0;
char p[6];
char u[6];
printf("User: ");
fgets(u, sizeof u, stdin);
printf("Pass: ");
fgets(p, sizeof p, stdin);
printf("%s\n", p);
if (strcmp(user, u) == 0 && strcmp(passwd, p) == 0){
enter = 1;
}
return entrar;
}
int main(){
char user[] = "admin";
char passwd[] = "12345";
if (login(user, passwd)){
puts("--ACCESS GRANTED--");
}
else{
puts("--Wrong pass or user--");
}
return 0;
}
输出继电器
用户:admin
通行证:
- 错误传球或用户 -
按下回车后,它甚至不让我输入密码。
答案 0 :(得分:1)
这里的问题是你的char []的大小,如果你把它设置为6,&#39; admin&#39;会溢出,因为阅读带有获取会读取一些额外的字符。
尝试使用更大的字符串,我确定你能负担得起,说:
char u[10];
char p[10];
这仍然是一个非常吝啬的;)