У меня есть этот фрагмент кода (обобщенный)...
AnsiString working(AnsiString format,...)
{
va_list argptr;
AnsiString buff;
va_start(argptr, format);
buff.vprintf(format.c_str(), argptr);
va_end(argptr);
return buff;
}
И, на основе того, что по ссылке предпочтительнее, где это возможно, я изменил ее таким образом.
AnsiString broken(const AnsiString &format,...)
{
... the rest, totally identical ...
}
Мой код вызова выглядит так: -
AnsiString s1, s2;
s1 = working("Hello %s", "World");
s2 = broken("Hello %s", "World");
Но s1 содержит "Hello World", а s2 имеет "Hello (null)". Я думаю, это связано с тем, как работает va_start, но я не совсем уверен, что происходит.