バイナリファイルを読み取るときの最大サイズはいくつですか?

user3616359

doubleの配列を読みたいとしましょう。次に、このコードを使用します。

FILE *fp;
int n=100;
fp=fopen("file.bin","rb");
double *array=(double*)calloc(n,sizeof(double));
fread(array,sizeof(double),n,fp);
fclose(fp);

fread()関数に安全に使用できる最大nはいくつですか?

クバはモニカを忘れていません

答えはC標準7.19.8で提供されています。N1256ドラフトを使用します

size_t fread(void * restrict ptr,
          size_t size, size_t nmemb,
          FILE * restrict stream);

[7.19.8.1]には制限がないため、との値はsizenmemb指すストレージに十分なサイズがある限りSIZE_MAXタイプによって提供される最大値([7.18.3.2])まで可能です。ptr

fread実際にその数の要素を読み取ることが保証されているわけではありません

7.19.8.1.2freadアレイによって指さに関数は、読み出しptrまで nmembそのサイズによって指定される要素size[...]部分エレメントが読み出された場合、その値は不定です。(私の強調)

限りmalloc、それを割り当てることができ、あなたがそれを埋めることができますfreadが、fread要素の数が少ない読みして自由です。たとえば、適合fread実装はmin(SIZE_MAX/size, nmemb)、一度に要素を読み取ることに合理的に制限される可能性があります

そのため、あなたの使用freadは間違っています。読む必要のあるものを読み終えるか、エラーが発生するか、ファイルの終わりに達するまで、読み続ける必要があります。読む前にテストしないでくださいfeof

void processData(double * data, size_t count);

void readData(void) {
  FILE *file = fopen("file.bin","rb");
  size_t n = 100;

  if (file) {
    double * array = calloc(n, sizeof(double));
    double * head = array;
    if (!array) break;
    while (n) {
      size_t n_read = fread(head, sizeof(double), n, file);
      head += n_read;
      n -= n_read;
      if (feof(file) || ferror(file)) break;
    }
    processData(array, head-array);
    fclose(file);
  }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

バイナリファイルから最後のXバイトを除くすべてを読み取るにはどうすればよいですか?

分類Dev

サーバーとクライアントの両方でブロックすることなく、サーバーでリアルタイムに書き込まれているアップロードされたファイルのファイルサイズを読み取ってエコーする方法は?

分類Dev

バイナリファイルを閉じたり開いたりするときにバイナリファイルから読み取る

分類Dev

テキストファイルから読み取るときにchar []のサイズを取得するにはどうすればよいですか

分類Dev

バイナリファイルを「unsignedchar」ベクトルに読み取るときのテンプレート引数は何ですか

分類Dev

プライマリ列のNaN値について、CSVファイルの代替列から値を読み取ることはできますか?

分類Dev

ファイル全体を読み取ると、DISKのサイズよりも多くのRAMが必要になるのはなぜですか?

分類Dev

Pythonで大きなファイルからいくつかの行だけを読み取る方法は?

分類Dev

バイナリアクセス用にファイルを開くことがUnixで「無意味」であり、読み取り/書き込みの両方で「+」がないのはなぜですか?

分類Dev

バイナリファイルから一度に1つのIntを読み取ることができません

分類Dev

テキストとバイナリが混在するC ++で大きなファイルを読み取る方法

分類Dev

PHP-拡張子のないファイルのファイルサイズを読み取ることはできません

分類Dev

JVMで処理できる最大ファイルサイズはいくつですか?

分類Dev

Cのバイナリファイルから文字列を読み取るときにアクセス違反

分類Dev

ファイルバイナリを読み取るmkvからクラスターのtimstempを抽出するにはどうすればよいですか?

分類Dev

行単位でファイルを読み取るときに、バッファーサイズが常に4096の整数倍にならないのはなぜですか?

分類Dev

MPI I / Oでバイナリファイルを読み取るときの誤った結果

分類Dev

Gradleでファイルサイズを読み取るにはどうすればよいですか?

分類Dev

これは、double でいっぱいのバイナリ ファイルを読み取る良い方法ですか?

分類Dev

statを使用して、人間が読み取れるファイルのサイズを表示できますか?

分類Dev

Haskellで大きなバイナリファイルを読み取る最速の方法は?

分類Dev

VBScriptを使用してファイルを開いてバイナリを読み取ることは可能ですか?

分類Dev

バックスラッシュを含む応答@ファイルから引数が読み取られるときに、MSYSから(既存の静的)ライブラリを見つけることができないのはなぜですか?

分類Dev

Javaでのバイナリファイルの読み取りと書き込み(ファイルの半分が破損しているのが見える)

分類Dev

C ++でバイナリファイルを読み取ると、予期しない値が返されます

分類Dev

バイナリファイルから読み取り、テキストファイルに書き込むサブプログラムを作成するにはどうすればよいですか?

分類Dev

バイナリファイルからunsignedlongを読み取る

分類Dev

1と0の文字列シーケンスでバイナリファイルを読み取る方法は?

分類Dev

Python:Powershellでのstdinからのバイナリファイルの読み取りと書き込み

Related 関連記事

  1. 1

    バイナリファイルから最後のXバイトを除くすべてを読み取るにはどうすればよいですか?

  2. 2

    サーバーとクライアントの両方でブロックすることなく、サーバーでリアルタイムに書き込まれているアップロードされたファイルのファイルサイズを読み取ってエコーする方法は?

  3. 3

    バイナリファイルを閉じたり開いたりするときにバイナリファイルから読み取る

  4. 4

    テキストファイルから読み取るときにchar []のサイズを取得するにはどうすればよいですか

  5. 5

    バイナリファイルを「unsignedchar」ベクトルに読み取るときのテンプレート引数は何ですか

  6. 6

    プライマリ列のNaN値について、CSVファイルの代替列から値を読み取ることはできますか?

  7. 7

    ファイル全体を読み取ると、DISKのサイズよりも多くのRAMが必要になるのはなぜですか?

  8. 8

    Pythonで大きなファイルからいくつかの行だけを読み取る方法は?

  9. 9

    バイナリアクセス用にファイルを開くことがUnixで「無意味」であり、読み取り/書き込みの両方で「+」がないのはなぜですか?

  10. 10

    バイナリファイルから一度に1つのIntを読み取ることができません

  11. 11

    テキストとバイナリが混在するC ++で大きなファイルを読み取る方法

  12. 12

    PHP-拡張子のないファイルのファイルサイズを読み取ることはできません

  13. 13

    JVMで処理できる最大ファイルサイズはいくつですか?

  14. 14

    Cのバイナリファイルから文字列を読み取るときにアクセス違反

  15. 15

    ファイルバイナリを読み取るmkvからクラスターのtimstempを抽出するにはどうすればよいですか?

  16. 16

    行単位でファイルを読み取るときに、バッファーサイズが常に4096の整数倍にならないのはなぜですか?

  17. 17

    MPI I / Oでバイナリファイルを読み取るときの誤った結果

  18. 18

    Gradleでファイルサイズを読み取るにはどうすればよいですか?

  19. 19

    これは、double でいっぱいのバイナリ ファイルを読み取る良い方法ですか?

  20. 20

    statを使用して、人間が読み取れるファイルのサイズを表示できますか?

  21. 21

    Haskellで大きなバイナリファイルを読み取る最速の方法は?

  22. 22

    VBScriptを使用してファイルを開いてバイナリを読み取ることは可能ですか?

  23. 23

    バックスラッシュを含む応答@ファイルから引数が読み取られるときに、MSYSから(既存の静的)ライブラリを見つけることができないのはなぜですか?

  24. 24

    Javaでのバイナリファイルの読み取りと書き込み(ファイルの半分が破損しているのが見える)

  25. 25

    C ++でバイナリファイルを読み取ると、予期しない値が返されます

  26. 26

    バイナリファイルから読み取り、テキストファイルに書き込むサブプログラムを作成するにはどうすればよいですか?

  27. 27

    バイナリファイルからunsignedlongを読み取る

  28. 28

    1と0の文字列シーケンスでバイナリファイルを読み取る方法は?

  29. 29

    Python:Powershellでのstdinからのバイナリファイルの読み取りと書き込み

ホットタグ

アーカイブ