C中的简单密码提示

时间:2016-05-17 20:29:55

标签: c pointers fgets password-prompt

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

     

通行证:

     

- 错误传球或用户 -

按下回车后,它甚至不让我输入密码。

1 个答案:

答案 0 :(得分:1)

这里的问题是你的char []的大小,如果你把它设置为6,&#39; admin&#39;会溢出,因为阅读带有获取会读取一些额外的字符。

尝试使用更大的字符串,我确定你能负担得起,说:

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

这仍然是一个非常吝啬的;)