Se ho capito quello che chiedi, vuoi sapere quanto può essere lungo al massimo un int trasformato in stringa, o sbaglio?
Considerando interi a 32 bit senza segno si può facilmente calcolare che 2^32-1=4294967295, che si scrive con 10 cifre decimali; con segno il numero più lungo che ci può essere è -2^31=-2147483648, lungo 11 cifre decimali. Con interi a n bit il ragionamento è sempre lo stesso: l'intero senza segno più lungo sarà 2^n-1, mentre quello con segno -2^(n-1).
Per evitare calcoli astrusi, comunque, io di solito visualizzo i codici di errore in esadecimale, per cui c'è una corrispondenza immediata tra bit della variabile e cifre esadecimale utilizzate (dato che 4 bit=una cifra esadecimale); inoltre visualizzare i codici di errore in esadecimale è molto più tennico .
Originariamente inviato da skricchi
su questo hai assolutamente ragione e lo so anche io, il punto è che non riesco a capire questo -29 se io lo richiamo per inserirlo in un array di char ad esempio in questo modo:

codice:
sprintf(warning, "%d,", ERR_OUTDATE);
quanto spazio prende????
Tre caratteri più il NUL finale. Comunque da questo punto di vista puoi anche fare così:
codice:
#define STRINGIFY(x) #x

#define TOSTRING(x) STRINGIFY(x)

const char * warning = TOSTRING(ERR_OUTDATE);
e non te ne devi preoccupare più, visto che il puntatore in questione sarà sempre valido. Infatti dopo la passata del precompilatore diventerà:
codice:
const char * warning = "-29";
.