У меня есть такой код
#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
Я читаю это статья и я получил
…
Обратите внимание, что testit ожидает, что его второй параметр будет либо int, либо
символ *. …
Как я могу это исправить? Функция str.Format может сделать это правильно, поэтому я знаю, что должен быть способ — я прочитал исходный код функции Format, но я все еще не знаю, как это исправить.
Спасибо за чтение 🙂
Вы должны использовать CString::FormatV
вместо этого — он принимает va_list
как второй аргумент. Переходя va_list
к CString::Format
плохая идея, потому что она создает другую va_list
с va_list
внутри.
Обычно реализуют два метода: один с переменным числом аргументов, а другой с va_list
,
Других решений пока нет …