El el enfoque estándar es usar sprintf(buffer, "%lu", value);
para escribir un representante de cadena de value
a buffer
. Sin embargo, el desbordamiento es un problema potencial, ya que sprintf
estará feliz (y sin saberlo) escribiendo sobre el final de su búfer.
Esto es en realidad una gran debilidad del sprintf, parcialmente corregido en C++ mediante el uso de flujos en lugar de búferes. La "respuesta" habitual es asignar un búfer muy generoso que probablemente no se desborde, deje que sprintf lo genere, y luego use strlen para determinar la longitud de cadena real producida, calloc un búfer de (ese tamaño + 1) y copie el hilo a ese .
This site analiza este y otros problemas relacionados con cierta extensión.
Algunas bibliotecas ofrecen snprintf
como una alternativa que le permite especificar un tamaño de búfer máximo.
'sprintf' ...? – kennytm
con sprintf, cómo determinar el tamaño del búfer de manera independiente de la plataforma – Walidix
@Walidix la respuesta es probablemente limits.h: http://en.wikipedia.org/wiki/Limits.h –