[Slabot-devel] Pequeño problema con la implementación de strbuild
Gonzalo José Carracedo Carballal
batchdrake at gmail.com
Fri Jun 22 13:23:01 CEST 2007
En efecto, ha ocurrido lo que más me temía. Resulta que cuando
limitamos el tamaño máximo de la cadena con funciones de la familia de
snprintf, ésta SÍ que añade el NUL al final. El truco de comprobar la
existencia de ese NUL no nos va a funcionar, por desgracia.
No obstante, según leo en la página de manual de printf(3):
> Valor devuelto
> Estas funciones devuelven el número de caracteres impresos (no incluyendo el
> carácter '\0' usado para terminar la salida de cadenas). snprintf y vsnprintf no
> escriben más de size bytes (incluyendo el carácter terminador '\0'), y devuelven -1
> si la salida se ha truncado debido a esta limitación. (Así es hasta la versión
> 2.0.6 de glibc. Desde la versión 2.1 estas funciones siguen el estándar C99 y
> devuelven el número de caracteres (excluyendo el carácter terminador '\0') que se
> habrían escrito en la cadena final si hubiera habido suficiente espacio.)
Desconozco el comportamiento de las diversas implementaciones de estas
funciones de la familia snprintf. Sólo conozco su comportamiento en el
caso de la libc de Linux (y sus versiones anteriores). Así que, o
comenzamos a suponer "comportamientos ideales", o tendremos que
empezar rebuscar implementaciones en toda la sopa de sabores de Unix.
Eso sí, la función ya está hecha y bastante comprobada (de hecho, la
hice lo suficientemente inteligente para saber qué hacer en el peor de
los casos), sólo quería daros a conocer este comportamiento
inesperado; por si fuese necesario descartar esta versión o dejarla
por si existiese alguna "implementación rebelde".
Saludos
--
BatchDrake
More information about the Slabot-devel
mailing list