2012-03-09 25 views
1

私はstderrに文字列を書き込みます fprintf(strderr、format strimg、string) 以降他の関数からstderrに何かが書き込まれているかどうかを確認する必要があります。stderrが空であることを確認してください

この問題では、stderrが空であるかどうかを確認するだけでいいですか?あるいは、ferror(stderr)がそのトリックをするでしょうか?

+1

を使用しています。あなたはstderrへの出力を別の関数に分解し、それが呼び出されるとブール値を設定できませんでしたか? –

答えて

1

エラーが発生したかどうかを追跡するためにブール値フラグを使用する方がよいでしょう - stderrに書き込むたびにfalseに初期化し、trueに設定します。その後

0

はコメントでthis

を見て、EOFについての何かが、あまりにも、あります...ことを確認してください。あなたが探しているものと正確に一致する可能性がありますか?

+1

これは入力ファイルには適していますが、出力にはあまり役に立ちません。 – JeremyP

0

することで、機会があれば、

#include <stdio.h> 
#include <stdarg.h> 
char errprintf_called = 0; 
int errprintf(const char * fmt, ...) 
{ 
    errprintf_called = 1; 
    va_list ap; 
    va_start(ap, fmt); 
    int ret = vfprintf(stderr, ap); 
    va_end(ap); 
    return ret; 
} 

を行うとstderrは、任意のポータブルな方法で書き込まれているかどうかをチェックすることができない私の知る限り

errprintf("Error %d has occured!", 42); 
if (errprintf_called) { 
    whine(); 
} else { 
    laugh(); 
} 
関連する問題