Я пытаюсь сделать простую аутентификацию пользователя и пароля в C. Мне сказали, что никогда не используйте gets() при вводе данных, и вместо этого я должен использовать fgets(). Но я не уверен, как работает fgets() или почему дает мне этот ввод. Вот код.Простой пароль-приглашение в C
#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
Пользователь: администратор
Pass:
--Wrong проход или user--
Он даже не позволил мне войти в пароль после нажатия кнопки ввода.
«читает символы из потока и сохраняет их в качестве C string в str до тех пор, пока не будут прочитаны символы (num-1) или не будет достигнута новая строка или конец файла, в зависимости от того, что произойдет раньше. '. Прекратите подсчет бобов. Если вам понадобятся текстовые буферы, просто объявите [128] (если не хватает ОЗУ). Пытаться к буферам точного размера просто вызовет вам ошибки, входные вызовы, возвращающиеся раньше, символы новой строки, оставшиеся во входных потоках, такие вещи .. –
Что произойдет, если у вас есть система («ПАУЗА») или getch() между fgets()? Я бы предположил, что, поскольку пароль пропускается, как только вы нажмете enter, он потребляет линию и использует ее для массива u [] и p []. – schil227
иметь в виду: (1) fgets хранит '\ n' в выходном буфере, (2) если вся строка ввода не помещается в выходной буфер, следующий вызов' fgets' будет читаться больше из той же строки, поэтому он не будет ждать –