2017-05-04 38 views
0

我得到一個負值從vwprintf返回,並且我的消息未打印。 該文檔說負返回值表示發生了錯誤,但我可以找到一種方法來查找錯誤代碼或消息(errno值未更改)。 我怎樣才能找到錯誤?vwprintf錯誤處理(errno顯示0)

我的代碼:

void func(const wchar_t * fmt, ...) const 
{ 
    // fmt is not empty 
    errno = 0; 
    va_list args; 
    va_start(args, fmt); 
    int result = vwprintf(fmt, args); // result = -1 

    if(result < 0) 
    { 
     int isError = ferror(stdout); //isError = 1 
     int errorCode = errno; //errorCode = 0 
    } 
    printf("\n"); 
    va_end(args); 
} 
+1

'va_args'需要一個可變參數函數的參數(三個點'...'),即像'無效myfunction的(字符* fmt,...)','va_start'需要可變參數之前的最後一個參數。在你的代碼中,'fmt'是一個局部變量,我錯過了某處的可變參數。你能證明嗎? –

+0

this line'int result = vwprintf(fmt,args);'試圖打印'char * fmt'空字符串http://www.cplusplus.com/reference/cwchar/vwprintf/ – PRDeving

+0

@StephanLechner,對不起清楚。我剛剛編輯了代碼,所以它是我的原始代碼。 – benams

回答

0

我不能複製任何錯誤;我期望傳遞給函數的參數有問題。請參閱以下代碼,該代碼適用於我。希望它在某種程度上可以解決你的問題:

void func(const wchar_t * fmt, ...) { 
    va_list args; 
    va_start(args, fmt); 
    int result = vwprintf(fmt, args); // result = 19 
    va_end(args); 
} 

int main() { 
    func(L"%d:%d:%s\n",10,20,"Hello world!"); 
    return 0; 
} 

輸出:

10:20:Hello world! 
+0

其實它適用於〜3000條線,然後它就停止工作。 – benams