2016-07-10 2 views
-1

Следующая функция печатает мусор на консоли. Не могу понять проблему. Ниже приведен фрагмент тестового кода.Переменный список аргументов печатает мусор

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

Пожалуйста, укажите код! – 2501

ответ

1

Вы вызывали неопределенное поведение путем передачи данных, имеющих неправильный тип, на printf(). Вы должны использовать vprintf() для работы с va_list.

Также не забудьте изменить %S к %s для работы с обычной строкой или изменить "Test" к L"Test" для работы с широкой строкой, или вы будете ссылаться на неопределенного поведении, передавая данные, имеющие неправильный тип для printf() семья снова.

0

Вы не можете передать va_list в printf. Вместо этого используйте vprintf.

Смежные вопросы