le specifiche di conversione printf sono% seguite da flag, larghezza, precisione, modificatore di lunghezza e identificatore di conversione. C'è un limite pratico alle dimensioni di una specifica di conversione?
Ho dovuto occuparmi in passato di diverse implementazioni standard printf
e la mia impressione generale che non ci sia un limite particolare imposto.
La stringa di formato viene generalmente analizzata carattere per carattere. (Pensa semplicemente a FSM.) La maggior parte delle implementazioni printf
evita il buffering di qualsiasi cosa internamente e anche per i numeri usa la conversione char in char in decimale (nemmeno atoi
).
È possibile controllare ad esempio come lo printf
è implementato all'interno dello FreeBSD kernel (dove da molte altre implementazioni spesso si solleva il codice). Questa è sicuramente un'implementazione semplificata (con un paio di modifiche specifiche del kernel), ma riflette il modo in cui viene spesso gestita la stringa di formato.
N.B.Ho appena controllato l'implementazione di glibc vfprintf()
e allocano internamente un buffer (se necessario) con malloc()
. Quindi nessun limite particolare lì.
La mia domanda è, qual è la lunghezza della specifica singola massima in una stringa di formato che può essere creata, secondo lo standard C99?
L'identificatore di formato è una parte di una stringa e la lunghezza della stringa a mia conoscenza non è limitata dallo standard. E come ho detto sopra, non ho mai visto un'implementazione con un limite del genere.
Ah, capisco, sei solo interessato ai limiti pratici su una specifica di singolo formato di una stringa di formato. Allora elimino la mia risposta. –
Sono curioso - c'è qualche ragione per cui vuoi sapere oltre alla curiosità? – nategoose
@nategoose: sto considerando un wrapper molto speciale su 'snprintf' e voglio capire se posso allocare staticamente dei buffer temporanei – zaharpopov