va_list无法获取任何类型

时间:2016-04-02 04:31:53

标签: c++ params variadic-functions

我有这样的代码

 #include "atlstr.h"

void DisplayMessage(CString pszFormat, ...)
{
    CString str;
    va_list argList;
    va_start(argList, pszFormat);
    str.Format(pszFormat, argList);
    va_end(argList);

    _tprintf(_T("%s"), str);
}

void main()
{           
    DisplayMessage("This should be right %.2f = 700.0", 700.0);

    //Stop to watch
    int i = 0;
    scanf_s("%d",i);
}

但是我运行代码时得到的是

This should be right 0.00 = 700.0

我读了这个article,我得到了

  

...   请注意,testit期望其第二个参数是int或   一个char *。 ...

我该如何解决这个问题? str.Format函数可以正确执行,所以我知道必须有一种方法 - 我已经阅读了Format函数的源代码,但我仍然不知道如何解决它。 感谢阅读:)

1 个答案:

答案 0 :(得分:3)

您应该使用CString::FormatV - 它接受va_list作为第二个参数。将va_list传递给CString::Format是一个坏主意,因为它会在va_list内创建另一个va_list

通常实现两个方法:一个具有可变参数个数,另一个具有va_list