printf las especificaciones de conversión son% seguidas por las banderas, el ancho, la precisión, el modificador de longitud y el especificador de conversión. ¿Existe un límite práctico al tamaño de una especificación de conversión?
Tuve que lidiar en el pasado con varias implementaciones estándar de printf
y mi impresión general de que no se impone ningún límite en particular.
La cadena de formato generalmente se analiza carácter por carácter. (Piense en FSM.) La mayoría de las implementaciones de printf
evitan el almacenamiento en el búfer de cualquier cosa internamente e incluso para los números utilizan la conversión de char por char a decimal (ni siquiera atoi
).
Puede comprobar, por ejemplo, cómo se implementa printf
dentro del FreeBSD kernel (donde desde muchas otras implementaciones a menudo levanta el código). Sin duda, se trata de una implementación simplificada (con un par de ajustes específicos del kernel), pero refleja cómo se maneja a menudo la cadena de formato.
N. B.Acabo de comprobar la implementación de glibc vfprintf()
y asignan internamente un búfer (si es necesario) con malloc()
. Entonces ninguno de los dos límites allí.
Mi pregunta es, ¿cuál es la longitud de la especificación única máxima en una cadena de formato que se puede crear, de acuerdo con el estándar C99?
El especificador de formato es una parte de una cadena y la longitud de la secuencia que, a mi conocimiento, no está limitada por el estándar. Y como mencioné anteriormente, ninguno de los dos he visto una implementación con ese límite.
Ah, ya veo, usted está interesado en los límites prácticos en una especificación de formato único de una cadena de formato. Borro mi respuesta entonces. –
Tengo curiosidad: ¿hay alguna razón por la que quieras saber además de la curiosidad? – nategoose
@nategoose: estoy considerando un envoltorio muy especial sobre 'snprintf' y quiero saber si puedo asignar algunos almacenamientos intermedios temporales estáticamente – zaharpopov