va_list не может получить любой тип

У меня есть такой код

 #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, но я все еще не знаю, как это исправить.
Спасибо за чтение 🙂

0

Решение

Вы должны использовать CString::FormatV вместо этого — он принимает va_list как второй аргумент. Переходя va_list к CString::Format плохая идея, потому что она создает другую va_list с va_list внутри.

Обычно реализуют два метода: один с переменным числом аргументов, а другой с va_list,

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]