1

ferrorこの例の check は、両方の s のエラーをチェックしますかfprintf、それとも 2 番目の s だけをチェックしますか?

FILE * myout;
if ((myout = fopen("Assignment 11.txt", "a")) != NULL)
{
    fprintf(myout, "First print ", str1);  
    fprintf(myout, "Second print", str1);

    if (ferror(myout))
        fprintf(stderr, "Error printing to file!");

    fclose(myout);
}
4

1 に答える 1

2

エラーが発生した場合、ストリームで が呼び出されない限りリセットされないclearerrため、両方の書き込みのいずれかで発生したエラーが記録されます。

ferror マニュアルページから:

関数 ferror() は、stream が指すストリームのエラー インジケータをテストし、設定されている場合はゼロ以外を返します。エラー インジケータは、clearerr() 関数によってのみリセットできます。

しかし、単にfprintfリターン コードを使用して、何か問題が発生したかどうかを確認することもできます。

出力エラーが発生した場合は、負の値が返されます。

( fprintf マニュアルページ)

このように (元の投稿の誤りを指摘してくれたジョナサンに感謝します):

if (fprintf(myout, "First print %s\n", str1)<0) fprintf(stderr, "Error printing to file #1!");
if (fprintf(myout, "Second print %s\n", str1)<0) fprintf(stderr, "Error printing to file #2!");
于 2016-11-29T21:55:41.053 に答える