我有这段代码(总结)......
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 的工作方式,但我不确定发生了什么。