我有这样的代码
#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函数的源代码,但我仍然不知道如何解决它。 感谢阅读:)
答案 0 :(得分:3)
您应该使用CString::FormatV
- 它接受va_list
作为第二个参数。将va_list
传递给CString::Format
是一个坏主意,因为它会在va_list
内创建另一个va_list
。
通常实现两个方法:一个具有可变参数个数,另一个具有va_list
。