dポイントプレゼントキャンペーン実施中!

 ふと思ったのですが、

バイナリファイルの中の途中のデータが
EOFと認識されないのはどんな仕組みなのでしょうか?

 私の理解は

バイナリファイルはどんなデータも書き込める。

なのです。

 途中にEOFと認識されるようなデータが
書き込まれることは無いのかな?

と思ったのです。

A 回答 (6件)

バイナリデータの中に「EOF」が入っている場合それを「EOF]と認識してしまうと、その後のデータを読めね九なってしまいます。


 そこで、データの容量をチェックして総てのファイルを処理するようにしているのです。
    • good
    • 1
この回答へのお礼

ありがとうございました。
char c = fgetc(...);
if(c == EOF){....
のように、
して不安定なエラーが出て、
ぎもんがしょうじたのです。
 もちろん
int c = fgetc(...);
if(c == EOF){....
と修正したら
エラーは出なくなったのですが、
 EOFとは何だろう?
と思ったのです。
みなさまもおかげですっきりいたしました。
ありがとうございました。

お礼日時:2004/05/01 07:17

EOF=0x1aというのはDOSのテキストファイルの話です。



一般にCのライブラリ関数でEOFが返ってくるのは、単純に『読み込むデータがなくなった』ときです。

いわゆるバイナリファイルも当然大きさは有限ですから、順繰りに読んでいけばいつかはファイルの終端に達し、読むべきデータがなくなります。そうすると、読み込み関数はEOF(もしくはNULL)を返すのです。
逆に、途中のデータを読んでいて、その先にまだデータが残っている限り、EOFとは認識されないわけです。

ちなみに、C言語の世界でEOFの実体は -1 です。もちろん実際のファイルに-1というデータが入っているわけではありません。
    • good
    • 0
この回答へのお礼

ありがとうございました。
char c = fgetc(...);
if(c == EOF){....
のように、
して不安定なエラーが出て、
ぎもんがしょうじたのです。
 もちろん
int c = fgetc(...);
if(c == EOF){....
と修正したら
エラーは出なくなったのですが、
 EOFとは何だろう?
と思ったのです。
みなさまもおかげですっきりいたしました。
ありがとうございました。

お礼日時:2004/05/01 07:15

Windowsの場合、ファイルをテキストモードでオープンした場合、ファイル中の"0x1a"をEOFと扱います。


したがって、ファイルをオープンしたときのモードによってEOFの扱いが違ってきます。
なお、UNIXにはテキストモードはありません。
    • good
    • 0
この回答へのお礼

ありがとうございました。
char c = fgetc(...);
if(c == EOF){....
のように、
して不安定なエラーが出て、
ぎもんがしょうじたのです。
 もちろん
int c = fgetc(...);
if(c == EOF){....
と修正したら
エラーは出なくなったのですが、
 EOFとは何だろう?
と思ったのです。
みなさまもおかげですっきりいたしました。
ありがとうございました。

お礼日時:2004/05/01 07:16

そもそもEOFとはデータではないのでは?



バイナリファイルと言っても1byteのデータは0~255の値なので、fgetc関数などを用いたときEOFと区別がつけられるのではないでしょうか?
    • good
    • 0

 ちなみに、最近はテキストファイルでもEOFが書き込まれてないことが多いです。


 ファイルのサイズ情報を見れば、どこでファイルが終了するのか一目瞭然ですから、わざわざ入れる必要がないというわけです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
char c = fgetc(...);
if(c == EOF){....
のように、
して不安定なエラーが出て、
ぎもんがしょうじたのです。
 もちろん
int c = fgetc(...);
if(c == EOF){....
と修正したら
エラーは出なくなったのですが、
 EOFとは何だろう?
と思ったのです。
みなさまもおかげですっきりいたしました。
ありがとうございました。

お礼日時:2004/05/01 07:16

バイナリモードでファイルを読んでいる場合、EOFの検出はファイル内のデータとは関係ありません。


読み込みで、ファイルの最後に到達し、それ以上読み込むデータが無くなったときにEOFとなります。
    • good
    • 0
この回答へのお礼

ありがとうございました。
char c = fgetc(...);
if(c == EOF){....
のように、
して不安定なエラーが出て、
ぎもんがしょうじたのです。
 もちろん
int c = fgetc(...);
if(c == EOF){....
と修正したら
エラーは出なくなったのですが、
 EOFとは何だろう?
と思ったのです。
みなさまもおかげですっきりいたしました。
ありがとうございました。

お礼日時:2004/05/01 07:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています