Ответ 1
Возможно, необходимо учитывать возможные символы CR
+ LF
+ '\0'
и иметь строковое представление каждой строки, все еще помещенной в 512 байт памяти.
Я видел много минимальных требований, которые компилятор ANSI C должен поддерживать как 31 аргумент функции, и большинство чисел, похоже, имеют какой-то смысл.
Однако я не вижу аргументов в пользу поддержки не менее 509 символов в исходной строке. 511 или 512 имеет смысл, но 509 кажется произвольным.
В чем причина этого числа?
Возможно, необходимо учитывать возможные символы CR
+ LF
+ '\0'
и иметь строковое представление каждой строки, все еще помещенной в 512 байт памяти.
Пределы C11 dr 5.2.4.1 отличаются от пределов OP. Я подозреваю, что они пришли из C89.
4095 символов в логической строке источника
4095 символов в строковом литерале (после конкатенации)
[Изменить] @jwodder предложил более полный ответ.
Лучше всего я могу предоставить: 512 байтов были наиболее распространенным размером сектора для дискет, дискет и носителей на жестком диске примерно в середине 80-х до середины 90-х годов и, вероятно, способствовали, а также мысли @bizzehdee и @DigitalTrauma относительно любопытного лимита 509.
Это был очень популярный размер буфера.
прямо из этот вопрос
Возможно, 509 предназначен для обеспечения 512-байтового буфера с двумя байтами для терминатора строки "\ r\n", а для терминатора строк "\ 0" -
У меня нет источника, но я думал, что это два символа "
и символ \0, которые составляют эти 512 символов.
Я не думаю, что 2 символа для CRLF по двум причинам: это не символы по умолчанию, которые вы должны там написать, а для LINUX это только LF. Вот почему я говорю это два символа "
.