变量参数列表打印垃圾

时间:2016-07-10 09:27:16

标签: c variadic-functions

以下功能在控制台上打印垃圾。无法理解这个问题。下面是测试代码片段。

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;
}

2 个答案:

答案 0 :(得分:1)

您通过将具有错误类型的数据传递到printf()来调用未定义的行为。您应该使用vprintf()来使用va_list

另外,请不要忘记将%S更改为%s以使用普通字符串或将"Test"更改为L"Test"以便使用宽字符串,或者您将通过将具有错误类型的数据再次传递给printf()系列来调用未定义的行为

答案 1 :(得分:0)

您无法将va_list传递给printf。请改用vprintf