ferror()は、ストリームのエラーをテストします。
#include <stdio.h>
int ferror(FILE *stream);
streamはテストするストリームで、一般的にはfopen()が返した値を指定します。 たとえば、fgets()やfgetc()でテキストを読み込むときにエラーがあるかどうか調べることができます。
streamで示されたエラー指示子は、関数clearerr()を使ってリセットすることができます。
次の例は、入力ストリームstreamと出力ストリームostreamのエラーを調べて、 エラーがあればストリームからの読み書きのループを終了するプログラムの例です。
#include <stdio.h>
#ifdef _MSC_VER
#pragma warning(disable : 4996)
#endif
int main(int argc, char* argv[])
{
FILE *stream, *ostream;
int c;
stream = fopen("./test.txt", "r");
if (stream == NULL) {
fprintf(stdout, "入力ファイルを開くことができません.\n");
return;
}
ostream = fopen("./dest.txt", "w");
if (ostream == NULL) {
fprintf(stdout, "出力ファイルを開くことができません.\n");
return;
}
while (!feof(stream))
{
if (ferror(stream))
break;
c = fgetc(stream);
fputc(c, ostream);
if (ferror(ostream))
break;
}
fclose(stream);
fclose(ostream);
return 0;
}