Простая подсказка пароля в 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;
}