Есть цикл, если я ввожу больше 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;
}