私はこのコード(要約)を持っています...
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 の動作によるものだと思いますが、何が起こっているのか正確にはわかりません。