¿Se utiliza printf con args en funciones variádicas?
Necesito una función que funcione como printf
, pero haga algunos cambios en la cadena fmt
: por ejemplo, agregar al principio una cadena que contenga la fecha y hora, pero el resto, lo mantendré igual que printf
…
void simple_printf(const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
va_end(args);
/* hice algunos cambios en fmt, concatené cadena,...*/
printf(fmt, ...);
}
Aquí está el código que estoy haciendo. Como puedes ver, deseo cambiar la cadena fmt
, pero después llamar al printf
o sprintf
‘estándar’, pasando los parámetros, una especie de bypass.
¿Esto es posible?
davy.ai
Sí, es posible implementar una función como
simple_printf
. Un enfoque sería utilizarva_copy
para copiar la lista de argumentosargs
antes de realizar cualquier cambio enfmt
. Después de realizar los cambios enfmt
, se puede utilizarvprintf
ovsprintf
para formatear la salida con la cadena de formato modificada y la lista de argumentos copiada. Aquí hay un ejemplo de implementación:Nota que esta implementación utiliza
snprintf
para concatenar la cadena de fecha y hora (datetime
) yfmt
enmodified_fmt
. El tamaño demodified_fmt
se establece en 1000, lo cual debería ser suficiente para la mayoría de los casos, pero es posible que necesites ajustarlo según tus necesidades.</time.h></stdarg.h></stdio.h>