-3

我正在尝试在 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;
}

输出

用户:管理员

经过:

--错误的通行证或用户--

按回车后,它甚至不允许我输入密码。

4

1 回答 1

1

这里的问题是你的 char[] 的大小,如果你将它设置为 6,'admin' 会溢出,因为使用 get 读取会读取一些额外的字符。

尝试使用更大的字符串,我相信你可以负担得起,说:

char u[10];
char p[10];

这仍然是一个相当小气;)

于 2016-05-17T20:52:56.977 回答