Какого, спрашивается, рожна этот велосипед приходится постоянно изобретать?
Почему он не в стандартной библиотеке с самого начала? Что за бессмысленное чистоплюйство?
std::string format(const char * form, ...) { const int bufsize = 1024; char buf[bufsize]; std::string ret; va_list al, al_copy; va_start (al,form); va_copy (al_copy, al); int need = vsnprintf(buf, bufsize, form, al) + 1; if (need <= bufsize) { ret = buf; } else { char dyn[need]; vsprintf(dyn, form, al_copy); ret = dyn; } va_end(al_copy); va_end(al); return ret; }