Конечно, я могу установить максимальный размер на 200 и даже больше.Но я думаю, что это не очень хорошее решение.
Этот подход не так уж и плох.
Создание некоторого my_gets()
, который позволяет огромные строк, дает неограниченную памятьуправление ресурсами для пользовательского ввода - потенциальный хакерский эксплойт.Огромная строка, скорее всего, ошибочный ввод или злонамеренный взлом кода.
Я бы выбрал @ Константин Георгиу и использовал бы большой, но вменяемый верхний предел.Затем определите такие большие строки как ошибочные / враждебные.
Обратите внимание, что строки текстового файла имеют ограничение среды .Таким образом, доказательство огромных буферов может быть спорным.
Реализация должна поддерживать текстовые файлы со строками, содержащими не менее 254 символов, включая завершающий символ новой строки.Значение макроса BUFSIZ должно быть не менее 256. C11 §7.21.2 7
#define MY_BUFSIZE ((BUFSIZE < 4096) ? BUFSIZE : 4096)
char name[MY_BUFSIZE + 2];
if (fgets(name, sizeof name, stdin)) {
if (strlen(name) >= MY_BUFSIZE) Too_long_error();
Примечание: ввод необычно читается в виде нулевого символа рендеринга fgets()
проблемного.