可变参数列表打印垃圾
Variable argument list prints garbage
以下函数在控制台上打印垃圾。无法理解这个问题。下面是测试代码片段。
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;
}
您不能将 va_list
传递给 printf
。请改用 vprintf
。
您通过将错误类型的数据传递给 printf()
来调用 未定义的行为 。您应该使用 vprintf()
来处理 va_list
。
也不要忘记将 %S
更改为 %s
以使用普通字符串或将 "Test"
更改为 L"Test"
以使用宽字符串,或者您将通过将错误类型的数据再次传递给 printf()
系列来调用 未定义的行为。
以下函数在控制台上打印垃圾。无法理解这个问题。下面是测试代码片段。
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;
}
您不能将 va_list
传递给 printf
。请改用 vprintf
。
您通过将错误类型的数据传递给 printf()
来调用 未定义的行为 。您应该使用 vprintf()
来处理 va_list
。
也不要忘记将 %S
更改为 %s
以使用普通字符串或将 "Test"
更改为 L"Test"
以使用宽字符串,或者您将通过将错误类型的数据再次传递给 printf()
系列来调用 未定义的行为。