У меня есть следующий фрагмент кода в одной из моих программ:Какой размер следует использовать для fgets?
char input[LINE_SIZE + 1]; /* +1 for '\0'. */
while(fgets(input, LINE_SIZE, stdin) != NULL)
{
/* Do stuff. */
}
В вопросе, который с тех пор был удален, он указал мне, что мой код потенциально может быть ошибка. Я объявляю строки с обозначением «+ 1», чтобы сделать код более информативным и читаемым (гарантируя, что я не забываю учитывать терминатор NULL, потому что это было проблемой). Однако мне сказали, что fgets
должен использовать тот же самый размер для своего второго параметра. Я видел здесь другие сообщения, которые выполняют те же действия, что и я.
Я не уверен. Неправильная ли практика не включать «+ 1» в параметр fgets?
Плюс/минус 1 не требуется. Предложить 'fgets (input, sizeof input, stdin)', когда 'input' является массивом. – chux
Зачем передавать значение, которое вы * знаете * отключено на 1? Сказав это, он отключен на 1 в безопасном направлении, поэтому создает небольшой фактический риск. –
для 'char input [LINE_SIZE + 1];', 'LINE_SIZE' - максимальное количество символов (не считая терминатора), а' LINE_SIZE + 1' - фактический размер массива. Для 'fgets()', вы передаете размер массива ... он будет читать не более одного меньшего символа, чем это, и добавьте терминатор. – Dmitri