問題タブ [feof]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - fread が早期に EOF に到達するのはなぜですか?
ファイルをメモリに読み込む C ライブラリを作成しています。ファイル (ヘッダー) の最初の 54 バイトをスキップし、残りをデータとして読み取ります。fseek を使用してファイルの長さを判断し、次に fread を使用してファイルを読み取ります。
ループは 1 回実行され、EOF に達したため終了します (エラーなし)。最終的に、bytesRead = 10624、ftell(stream) = 28726 となり、バッファには 28726 個の値が含まれます。EOF に達したとき、fread は 30,000 バイトを読み取り、ファイル位置は 30054 になると予想しています。
C は私の母国語ではないので、どこかで初歩的なミスを犯したのではないかと思います。
コードは次のとおりです。
使用するリファレンスによっては、モード フラグに「b」を追加することが答えであることは明らかです。ボーンヘッドバッジのノミネートを募集しています。:-)
このリファレンスでは、2 番目の段落の 2 番目の文でそれについて説明しています (ただし、表にはありません)。
MSDNでは、ページの途中までバイナリ フラグについて説明していません。
OpenGroupは「b」タグの存在について言及していますが、「効果はない」と述べています。
c - Cファイル処理でのfeof()
バイナリファイルをバイトごとに読み取っています。eofに到達したかどうかを判断する必要があります。
feof()は、「存在しないバイトの読み取り要求が行われた場合にのみeofが設定される」ため機能しません。したがって、次のようなカスタムcheck_eofを使用できます。
ただし、問題は、eofに達しない場合に、ファイルポインタが1バイト先に移動することです。したがって、解決策は、使用ftell()
しfseek()
てから正しい位置に配置することです。
別の解決策は、一時的なストレージにバイトをバッファリングすることです。
より良い解決策はありますか?
php - php - feofエラー
読み込もうとしているファイルは pgp 暗号化ファイルです。これは暗号化を解除するプロセスの一部であり、実際にコンテンツを文字列に読み込んで暗号化を解除しようとしています。それがここでの中心的な問題かどうかはわかりませんが、エラーが発生しています:
ファイルコードは次のとおりです。
php - PHPのfeofの動作とCの動作
私はCとC++のバックグラウンドを持っていますが、いくつかのWeb関連のものでも遊んでいます。私たちすべてのCの人々は(願わくば)、読み取りを行う前feof
にaを呼び出すことはエラーであることを知っています。FILE*
これは、CおよびC++の初心者を非常に頻繁に刺すものです。これはPHPの実装にも当てはまりますか?
ファイルがソケットか、読み取りを完了する前にサイズを知ることが不可能な他の何かである可能性があるため、それが必要だと思います。しかし、ほぼすべてのPHPの例(私が見たphp.netで見つかったものでさえ)は次のようになります(そしてアラームが頭の中で鳴ります):
私はこれをこのように書き、この問題を回避することが望ましいことを知っています:
しかし、それは要点を超えています。「間違った方法」で失敗するかどうかをテストしてみましたが、正しく動作しないようにすることができませんでした。これは正確には科学的ではありませんが、試してみる価値があると思いました。
それで、PHPでfeof
の前に呼び出すのは間違っていますか?fread
PHPがCのバージョンとは異なる方法でこれを行うことができる方法はいくつかありますが、欠点があると思います。
デフォルトで!EOFにすることができます。一部のコーナーケースでは正しくない可能性があるため、これは最適ではありません。
呼び出し中にファイルサイズを取得することはできました
fopen
が、これはすべての種類のファイルリソースで機能するわけではなく、一貫性のない動作が発生し、速度が低下します。
c - feof(FILE * f)の使い方は?
ファイルの最後に到達すると停止するはずのdo-whileループで苦労しています。ループコードは次のとおりです。
デバッガーで実行した後、私が抱えているすべてのクラッシュの問題は、それが行全体に達してもこのループから出ないためであることに気づきました。
どうすれば正しく書くことができますか?
c++ - EOF に達していない場合に true を返す feof()
特定のオフセットでファイルから読み取ろうとしています (簡易版):
問題は、データに 1008 バイトではなく 529 バイトが含まれることです (ランダムなようです)。529 バイトに達すると、feof(data_fp) の呼び出しが true を返し始めます。
また、小さなチャンク (一度に 8 バイト) を読み込もうとしましたが、まだそこにないときに EOF に達しているように見えます。
16 進エディタで単純に見てみると、多くのバイトが残っていることがわかります。
c - 「while ( !feof (ファイル) )」が常に間違っているのはなぜですか?
feof()
読み取りループを制御するために使用することの何が問題になっていますか? 例えば:
このループの何が問題になっていますか?
c - feof() および fgetc() での C セグメンテーション違反エラー
誰かが私のジレンマを解決するのを手伝ってくれますか? プログラムをコンパイルしても、エラーや警告は表示されません。ただし、実際に実行可能ファイルを実行すると、セグメンテーション エラーが発生します。私の理解が正しければ、これは要するにポインターが間違って使用されているために発生します。feof(srcIn) 行で特定のエラーが発生しましたが、その理由がわかりません。FILE* srcIn には、プログラムの先頭にある srcIn = fopen(argv[0], "r") 値以外の新しい値が割り当てられることはありません。私はもともとこのソリューションを C++ で実装していましたが、理由により C に変更する必要がありました。とにかく、C++ では、条件として srcIn.eof() を使用し、読み取りメソッドとして srcIn.get(something) を使用することを除いて、本質的にまったく同じことを行いました。問題なくコンパイルして実行できました。
編集:セグフォルトが発生したときに、実際にはメインにさえ入っていないことを忘れていました。これにより、実行可能ファイル自体に何らかの問題があると思われます。gdb は、セグメント障害が次の行で発生していることを教えてくれます:
if(feof(srcIn))
何かアイデアはありますか?
c++ - fread を使用してファイルを読み取るときに最後のエントリを複製する
バイナリ ファイルを 4 バイトのチャンクで読み込もうとしています。ただし、最初の実装 (以下を参照) では、最後のエントリが複製され、最後のエントリのみが複製されます。
この代替実装には、その問題はありません。feof はいつ使用する必要がありますか? また、以前の実装で feof を使用すると、最後のエントリが 2 回読み取られるのはなぜですか? printf ステートメントで行ったように、ポインターをキャストするよりもバッファーを構築するためのより良い方法はありますか? このコードに他に何か問題はありますか?