[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