Я ищу 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 (), который размещен в открытом доступе, уже будет достаточной, тогда я смогу сделать это сам.
Большое спасибо!