Estoy buscando una implementación similar a sprintf() de una función que asigna automáticamente la memoria requerida. Así que quiero decirsprintf() con asignación de memoria automática?
char* my_str = dynamic_sprintf("Hello %s, this is a %.*s nice %05d string", a, b, c, d);
y my_str recupera la dirección de memoria asignada que contiene el resultado de esta sprintf().
En otro foro, leí que esto puede resolverse de esta manera:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char* ret;
char* a = "Hello";
char* b = "World";
int c = 123;
int numbytes;
numbytes = sprintf((char*)NULL, "%s %d %s!", a, c, b);
printf("numbytes = %d", numbytes);
ret = (char*)malloc((numbytes + 1) * sizeof(char));
sprintf(ret, "%s %d %s!", a, c, b);
printf("ret = >%s<\n", ret);
free(ret);
return 0;
}
Pero esto immediatelly resulta en una violación de segmento cuando se invoca el sprintf() con el NULL-puntero.
¿Alguna idea, solución o sugerencia? Una pequeña implementación de un analizador tipo sprintf() que se coloca en el dominio público ya sería suficiente, entonces podría hacerlo yo mismo.
¡Muchas gracias!
Quien sea que le haya dado ese consejo probablemente signifique que debe usar 'snprintf', no' sprintf'. –