Quando si converte un int in questo modo:
char a[256];
sprintf(a, "%d", 132);
qual è il modo migliore per determinare quanto è grande a dovrebbe essere? Presumo che l'impostazione manuale vada bene (come l'ho visto usato ovunque), ma quanto dovrebbe essere grande? Qual è il valore int più grande possibile su un sistema a 32 bit e c'è un modo complicato per determinarlo al volo?
Risposte:
Il numero massimo possibile di bit in un int è CHAR_BIT * sizeof(int)
e una cifra decimale "vale" almeno 3 bit, quindi un limite superiore libero nello spazio richiesto per un int
arbitrario è (CHAR_BIT * sizeof(int) / 3) + 3
. Quel +3 è uno per il fatto che abbiamo arrotondato per difetto quando abbiamo diviso, uno per il segno, uno per il terminatore nullo.
Se per "su un sistema a 32 bit" intendi che conosci int
è 32 bit, quindi sono necessari 12 byte. 10 per le cifre, una per il segno, una per il terminatore nullo.
Nel tuo caso specifico, dove l'int da convertire è 132
, hai bisogno di 4 byte. Badum, tish.
Laddove i buffer di dimensione fissa possono essere utilizzati con un limite ragionevole, sono l'opzione più semplice. Non molto umilmente sostengo che il limite sopra è ragionevole (13 byte invece di 12 per 32 bit int
e 23 byte invece di 21 per int
a 64 bit ). Ma per i casi difficili, in C99 potresti semplicemente chiamare snprintf
per ottenere la taglia, quindi malloc
così tanto. È eccessivo per un caso così semplice.