спецификациями преобразования printf являются%, за которыми следуют флаги, ширина, точность, модификатор длины и спецификатор преобразования.Существуют ли практические ограничения на размер спецификации преобразования?
В прошлом мне приходилось иметь дело с несколькими стандартными реализациями printf
, и у меня сложилось общее впечатление, что особого ограничения не установлено.
Строка формата обычно анализируется символ за символом.(Подумайте просто FSM .) Большинство реализаций printf
избегают внутренней буферизации чего-либо, и даже для чисел используется преобразование символ за символом в десятичное (даже не atoi
).
Вы можете проверитьнапример, как printf
реализован в ядре FreeBSD (где многие другие реализации часто поднимают код).Это, безусловно, упрощенная реализация (с парой специфичных для ядра настроек), но она отражает то, как часто обрабатывается строка формата.
NB Только что проверил реализацию vfprintf()
в glibc, и они внутренне выделяют буфер (при необходимости) с помощьюmalloc()
.Так что никаких особых ограничений там нет.
Мой вопрос: какова длина максимальной единственной спецификации в строке формата, которую можно создать в соответствии со стандартом C99?
Насколько мне известно, спецификатор формата является частью строки и длина строки не ограничена стандартом.И, как я упоминал выше, я никогда не видел реализацию с таким ограничением.