#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
void foo( const char format[], ... )
{
va_list args;
size_t length = 0;
va_start( args, format );
length = vsnprintf( 0, 0, format, args );
++length;
char *pbuffer = new char[length];
vsprintf( pbuffer, format, args ); // тут пробовал и vsnprintf( pbuffer, length, format, args ) с тем же результатом
printf( "%s", pbuffer );
va_end( args );
delete[] pbuffer;
}
int main()
{
foo( "Hello %s World!\n", "cruel" );
return 0;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGFyZy5oPgoKdm9pZCBmb28oIGNvbnN0IGNoYXIgZm9ybWF0W10sIC4uLiApCnsKICAgIHZhX2xpc3QgYXJnczsKICAgIHNpemVfdCAgbGVuZ3RoID0gMDsKCiAgICB2YV9zdGFydCggYXJncywgZm9ybWF0ICk7CgogICAgbGVuZ3RoID0gdnNucHJpbnRmKCAwLCAwLCBmb3JtYXQsIGFyZ3MgKTsKCiAgICArK2xlbmd0aDsKICAgIGNoYXIgKnBidWZmZXIgPSBuZXcgY2hhcltsZW5ndGhdOwoKICAgIHZzcHJpbnRmKCBwYnVmZmVyLCBmb3JtYXQsIGFyZ3MgKTsgLy8g0YLRg9GCINC/0YDQvtCx0L7QstCw0Lsg0LggdnNucHJpbnRmKCBwYnVmZmVyLCBsZW5ndGgsIGZvcm1hdCwgYXJncyApINGBINGC0LXQvCDQttC1INGA0LXQt9GD0LvRjNGC0LDRgtC+0LwKICAgIHByaW50ZiggIiVzIiwgcGJ1ZmZlciApOwoKICAgIHZhX2VuZCggYXJncyApOwoKICAgIGRlbGV0ZVtdIHBidWZmZXI7Cn0KCmludCBtYWluKCkKewogICAgZm9vKCAiSGVsbG8gJXMgV29ybGQhXG4iLCAiY3J1ZWwiICk7CgogICAgcmV0dXJuIDA7Cn0=