Простая подсказка пароля в C

Я пытаюсь сделать простую аутентификацию пользователя и пароля в C. Мне сказали никогда не использовать get () при получении ввода, и вместо этого я должен использовать 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;
}

Ouput

Пользователь: admin

Проходить:

- Неправильный проход или пользователь -

Он даже не позволяет мне вводить пароль после нажатия кнопки ввода.

2 ответа

Проблема здесь в размере вашего char[], если вы установите его на 6, "admin" переполнится, так как чтение с помощью get будет считывать некоторые дополнительные символы.

Попробуйте с большей строкой, я уверен, что вы можете себе это позволить, скажем:

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

И это все еще довольно скупо;)

ну .. у вас было две проблемы: одна, как предложено здесь, вы должны изменить размер u и p на 10, другая -fgetsтакже выбирает новую строку\nкоторые вам нужно удалить перед сравнением строк.

поэтому полный ответ будет таким:

      #include <stdio.h>
#include <string.h>

int login(char *user, char *passwd){

    int enter = 0;
    char p[10];
    char u[10];
    char *pos;
    printf("User: ");
    fgets(u, sizeof u, stdin);
    if ((pos=strchr(u, '\n')) != NULL) {
        *pos = '\0';
    }
    printf("'%s'\n", u);
    printf("Pass: "); 
    fgets(p, sizeof p, stdin);
    if ((pos=strchr(p, '\n')) != NULL) {
        *pos = '\0';
    }
    printf("'%s'\n", p);
    if (strcmp(user, u) == 0 && strcmp(passwd, p) == 0){
        enter = 1;
    }
    return enter;
}

int main(){
    char user[] = "admin";
    char passwd[] = "12345";
    if (login(user, passwd)){
        puts("--ACCESS GRANTED--");
    }
    else{
        puts("--Wrong pass or user--");
    }
    return 0;
}
Другие вопросы по тегам