Il L'approccio standard prevede l'uso di sprintf(buffer, "%lu", value);
per scrivere una ripetizione di stringa da value
a buffer
. Tuttavia, l'overflow è un potenziale problema, dato che sprintf
scriverà felicemente (e inconsapevolmente) alla fine del buffer.
Questo è in realtà un grande punto debole di sprintf, parzialmente risolto in C++ utilizzando flussi anziché buffer. La solita "risposta" è quella di allocare un buffer molto generoso che non rischia di traboccare, lasciare sprintf a quello, e quindi usare strlen per determinare la lunghezza effettiva della stringa prodotta, chiamare un buffer di (quella dimensione + 1) e copiare la stringa in quel .
This site discute questo e alcuni problemi correlati.
Alcune librerie offrono snprintf
un'alternativa che consente di specificare una dimensione massima del buffer.
fonte
2010-04-25 20:08:48
'sprintf' ...? – kennytm
con sprintf, come determinare la dimensione del buffer in modo indipendente dalla piattaforma – Walidix
@Walidix la risposta è probabilmente limits.h: http://en.wikipedia.org/wiki/Limits.h –