5

fread()エラーが発生したときに確認しようとしているので、 を使用しますferror()

chunk = fread(buf, 1, 100, file);
if (ferror(file))
  {
    return errno;
  }

しかし、ferror()マニュアルページには次のように書かれています:

エラーこれらの関数は失敗してはならず、外部変数 errno を設定しません。

では、ファイルが読み取られ、設定されfread()ていないときに発生したエラーの種類をどのように知ることができますか?ferror()errno

4

2 に答える 2

3

これらの関数は を使用しないためerrno、どちらも使用しないでください。

の戻り値から、すべてが順調に進んだかどうかがわかることは注目に値しますfread()。の戻り値がfread()渡されたパラメーター (この場合は 100) と異なるnmemb場合は、ファイルの最後に到達したか、読み取り中にエラーが発生しました ( source )。したがって、その場合にのみテストします。

errno の使用を完全に削除するだけです。

chunk = fread(buf, 1, 100, file);
if (chunk != 100) { // If fread() returns a number different to the nmemb parameter, either error or EOF occured
    if (ferror(file))
      {
        printf("Error occured while reading file.");
        return -1; // Or what ever return value you use to indicate an error
      }
}
于 2016-10-24T09:08:15.210 に答える