問題タブ [ftell]
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 - Cでテキストファイルからテキストの一部を表示する
私はテキストファイルを持っていて、特定の時間にその特定の部分だけを抽出したかった.そのために、書き込み中に ftell() を使用して開始位置と終了位置を記録し、次に fseek() を使用してその特定の場所にジャンプします.
これを試してみましたが、予期せぬプログラムの異常終了に直面しました。タスクを正しく実装する方法を教えてください。
c - Cの質問でIJVMチャンクファイルのサイズが間違っています
IJVM を実装してバイナリ ファイルを読み取ろうとしています。
.ijvm ファイルには 32 ビットのマジック ナンバーと任意の数のデータ ブロックが含まれており、データ ブロックには 3 つの部分があることを理解しています。私の意図は、最初に常に一定サイズのマジックナンバーを読み取って保存し、次にデータブロックを別の配列に保存することです。.ijvm ファイルは次のようになります。
1d ea df ad 00 01 00 00 00 00 00 00 00 00 00 00 00
00 00 07 10 30 10 31 60 fd ff
最初の 4 バイト ( 1d ea df ad
) はマジック n です。残りはデータブロックです。
ファイルを読み取った後、合計サイズが 27 バイトであることを確認したため、残りは 23 バイトである必要があります。
ただし、何を試しても、マジック部分とデータ部分を正しく保存して読み取っているにもかかわらず、データ部分のサイズが常に間違っており、23バイトではないと思います。
何が欠けているのか説明してもらえますか? 両方の dataBlocklen が 23 バイトを与えないのはなぜですか?
c - ファイルの長さを計算するときに fseek() の戻り値を確認する必要がありますか?
バイナリ ファイルの長さを取得するための慣用的なスニペットがあります。
…ペダンティックであることfseek(file, 0, SEEK_END)
は、バイナリ ストリームに対して未定義の動作をすることを知っています[ 1 ] – しかし、率直に言って、これが問題であるプラットフォームでは、私も持っていませんfstat()
。とにかく、これは別の質問のトピックです…</p>
私の質問は次のとおりfseek()
です。この場合、戻り値を確認する必要がありますか?
このようなケースでチェックされたのを見たことがありません。また、ここでどのようなエラーが返される可能性があるfseek()
のかも気になります。fseek()
編集:
Clifford's answerを読んだ後、ファイルのサイズを計算する際に値を処理しfseek()
てftell()
返す最良の方法は、専用の関数を作成することだとも思います。ただし、Clifford の良い提案ではsize_t
データ型を処理できませんでした (結局、サイズが必要です!)。そのため、最終的に最も実用的なアプローチは、ファイルのサイズを格納するためにポインターを使用し、戻り値を保持することだと思います。故障専用機能の価値。安全なサイズ計算機のためのクリフォードのソリューションへの私の貢献は次のとおりです。
そのため、ファイルの長さを知る必要がある場合は、次のように簡単に実行できます。
c - テキストファイルの Ftell
この小さなプログラムを使用して、ftell の仕組みを理解します。txtファイルを作成し、「15」と入力し、その下の2行目に「いいえ」と入力しました。だから私が期待したのは、0を出力し、15を読み取った後、2を出力し、2行目に「いいえ」があるため、最初の行にいくつかの「利用可能なスポット」を残し、より多くの文字で埋めることができたということでした私はそれが7よりも明らかに大きい数を印刷すると予想します(実際に印刷されたものです)。なぜ?
出力: 0 2 7