Il primo argomento sprintf
deve puntare a un buffer valido. Hai un char*
ma punta alla spazzatura.
modificare il codice per:
char numString[80] = { };
int charcheck = sprintf(numString, "%d", numCheck);
In modo che numString
in realtà punta a un buffer valida (di 80 caratteri in questo esempio, tutti gli elementi di cui vengono inizializzati a 0).
Sarebbe anche bene utilizzare snprintf
in modo da poter passare la dimensione del buffer ad esso, che aiuterà a prevenire i buffer overflow:
const int bufsize = 80;
char numString[bufsize] = { };
int charcheck = snprintf(numString, bufsize - 1, "%d", numCheck);
noti che si sottrae uno dalla dimensione del buffer che si passa a snprintf
perché non si desidera che utilizzi l'ultimo slot, che si desidera assicurarsi sia NULL
per indicare la fine della stringa.
fonte
2011-08-25 01:44:23
Esattamente perché funziona quando non raccolgo i risultati? – syl
È un comportamento non definito. A volte il comportamento non definito si comporta esattamente come te lo aspetti, il che è probabilmente il caso peggiore. –
Perché raccomandi 'snprintf' su' sprintf'? – Kevin