2016-07-10 13 views
-1

Folgende Funktion druckt Müll auf der Konsole. Kann das Problem nicht verstehen. Unten ist ein Testcode-Fragment.Variable Argumentliste druckt Müll

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

Bitte den Code einrücken! – 2501

Antwort

1

Sie haben undefiniertes Verhalten aufgerufen, indem Sie Daten mit falschem Typ an printf() übergeben. Sie sollten vprintf() verwenden, um mit va_list zu arbeiten.

Vergessen Sie auch nicht %S zu %s, um mit normaler Zeichenfolge zu arbeiten zu ändern oder "Test" zu L"Test", um mit breiter Zeichenfolge zu arbeiten zu ändern, oder Sie werden undefiniertes Verhalten aufrufe, indem Daten, die falsche Art zu printf() vorbei Familie wieder.

0

Sie können nicht va_list-printf passieren. Verwenden Sie stattdessen vprintf.