Puede usar las funciones de estilo vsprintf para obtener la impresión de estilo de impresión para su parámetro de longitud variable. Sin embargo, no hay requisito para hacerlo. Puede, si elige, escribir su función para seguir aceptando parámetros hasta que encuentre un puntero nulo.
va_list ap;
char *param;
va_start(ap,fmt);
param = va_arg(ap,char*);
while(param)
{
do something...
param = va_arg(ap,char*);
}
o puede hacer que el número de parámetros que el primer parámetro a la función
void my_printf(int param_num,...)
{
va_list ap;
char *param;
va_start(ap,fmt);
while(param_num)
{
do something...
param = va_arg(ap,char*);
param_num--;
}
}
Es realmente depende de ti, las posibilidades son ilimitadas. Creo que el único requisito real para las elipses es que tiene al menos un parámetro antes de las elipsis.
¿Cómo vas a saber que el buffer es lo suficientemente grande? Y realmente debe devolver el número de conversiones realizadas por sprintf(), de lo contrario, los usuarios no tienen forma de saber que la función funcionó. –
Rayé todo lo que no era esencial para ilustrar mi punto. Obviamente, en mi código de publicación soy mucho más completo :) – Mike