Есть цикл, если я ввожу больше 32 символов, то количество Enter pass: , увеличиваеться
Есть цикл, в нём для input записано 32 символа, если я ввожу больше 32 символов, то количество Enter pass:, увеличиваеться Сам код:
#include <stdio.h>
int main()
{
int i = 0;
char pass[] = "1999";
char input[32];
while (1) {
printf_s("Enter pass: ");
fgets(input, sizeof(input), stdin);
}
return 0;
}
Почему так происходит? Что по этому можно почитать? И есть ли тут уязвимость при большем введении символов для input?
Ответы (1 шт):
При запуске, твоя программа получает буфер ввода. Этот буфер -- условный большой массив, обозначаемый в Си именем stdin
. Когда программа запрашивает ввод, посылаемые ей символы записываются именно в stdin
.
После завершения ввода функция fgets(input, sizeof(input), stdin)
копирует не больше sizeof(input)
байт из stdin
в input
. Таким образом, если введено было больше 32 байт, то после их копирования в буфере stdin
остаются ещё байты. Так функция fgets()
при следующей итерации сразу получает те самые оставшиеся в stdin
байты как новую партию ввода.
UPD: не сразу заметил, что fflush()
не работает в данном случае. Можно использовать следующий код:
#include <stdio.h>
int main()
{
int i = 0;
char pass[] = "1999";
char input[32];
while (1) {
printf("Enter pass: ");
for (int i = 0; i < 32; i++)
input[i] = getchar();
input[i] = '\0';
}
return 0;
}