2016-05-07 1 views
-2

C++では、filestream.closeのような文でEOF文字がファイルの最後に自動的に付加されることがわかりました。私は知りたかったのですが、デフォルトではこれもCで行っていますか?Cのfclose()関数は、デフォルトでEOF文字を追加しますか?

+2

ファイルに「EOF文字」が追加されていません。 C++の 'ofstream'でファイルを作成し、次にそれをヘキサダンプすると、あなた自身で書いたものとは別に何も見えません。 'EOF'は、一部のC入出力関数から返された単純な定数で、ストリームに何も読み込まれていないことを示します。 – szczurcio

+1

いいえ 'fclose'は' CTRL + Z'(またはDOS時間のEOF文字)を追加しませんが、ANSIテキストストリームを開くときや 'f 'を' t' '、テキスト修飾子で使うときには、 'CTRL + Z'文字の存在、ファイルの切り詰め、それを削除して、間違った' fseek'と 'ftell'の振る舞いを避けます。 –

答えて

1

文字ではありません。あなたの質問の下にあるコメントを参照してください。 でも、(feof(file))で確認することもできます。それは状態のようです。

+0

あなたが 'feof'について正しいのですが、コメントに指摘されているように、" EOF文字 "はありません。また、多くの人が問題を抱えているため、関数を正しく使用する方法についても言及したいと思うかもしれません。https://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong – szczurcio

6

EOFは文字ではありません。ファイルの末尾に達したことを示すために、いくつかの操作によって戻される値は、文字以外のintです。だから問題は "fclose()関数はCでファイルを閉じます"もちろんです。

2

EOF文字はありません。 EOF "は任意の有効な文字コードと等しくありません"。しばしば-1です。ファイルには書き込まれません。

DOSではEOF文字の値が(CTRL+Z)ですが、最近は廃止されています。

fclosefilestream.closeとよく似ており、ファイルを閉じます。

も参照してください:reference answer

+0

参照非常に良いですが、なぜここにコピーしますか? – Elazar

+0

それをコピーしてクレジットを与えるために参照を追加しました。 –

+0

質問に既に回答している場合は、 "duplicate of ..."として投票を終了する必要があります。 – Elazar

1

ファイルへの書き込みに必要な明示的なファイル終了文字があった場合は、[はい、fcloseはそれを書くように手配します。自分で書く必要はありません。

たとえば、ある時点で、MS-DOSのテキストファイルの末尾に明示的なcontrol-Zファイル終了文字があります。そのOSの下のCでは、fcloseと呼んだときに、control-Z文字が書き込まれると予想していました。 (ただし、それはMS-DOSを使ってからずっとずっと長く続けられていますが、私はこれを見て覚えているとは思いません)ディスク上のファイルに明示的なファイル終端文字が必要なので、問題は解決しません。

関連する問題