可变参数列表打印垃圾

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() 系列来调用 未定义的行为