sprintf () с автоматическим распределением памяти?

Я ищу sprintf () - подобную реализацию функции, которая автоматически выделяет требуемую память. Итак, я хочу сказать

char* my_str = dynamic_sprintf( "Hello %s, this is a %.*s nice %05d string", a, b, c, d );

и my_str извлекает адрес выделенной памяти, которая содержит результат этого sprintf ().

На другом форуме я читал, что это можно решить так:

#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;
}

Но это немедленно приводит к segfault, когда вызывается sprintf () с NULL-указателем.

Итак, есть идеи, решения или советы? Небольшая реализация синтаксического анализатора, подобного sprintf (), который размещен в открытом доступе, уже будет достаточно, тогда я смог бы сделать это сам.

Большое спасибо!

Ответы на вопрос(5)

Ваш ответ на вопрос