2017-05-04 7 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'は可変引数関数の引数が必要です(3つのドット' ... ')、すなわち'空のMyFunction(文字のようなものは* fmt、...) 'であり、' va_start'は変数の前に最後の引数が必要です。あなたのコードでは、 'fmt'はローカル変数です。私はどこかで可変引数を見逃しています。それを見せてもらえますか? –

+0

この行 '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

関連する問題