以下功能在控制台上打印垃圾。无法理解这个问题。下面是测试代码片段。
void
format(
const char* pcszFormat,
...
)
{
va_list VarArglist;
va_start(VarArglist, pcszFormat);
printf(pcszFormat, VarArglist);
va_end(VarArglist);
}
int wmain(int argc, wchar_t *argv[])
{
string strTest;
const char *pcszFormatted;
format("%x %S", 10, "Test");
//printf("\nFormatted string: %s", pcszFormatted);
getchar();
return 0;
}
答案 0 :(得分:1)
您通过将具有错误类型的数据传递到printf()
来调用未定义的行为。您应该使用vprintf()
来使用va_list
。
另外,请不要忘记将%S
更改为%s
以使用普通字符串或将"Test"
更改为L"Test"
以便使用宽字符串,或者您将通过将具有错误类型的数据再次传递给printf()
系列来调用未定义的行为。
答案 1 :(得分:0)
您无法将va_list
传递给printf
。请改用vprintf
。