EOTはASCIIコード4であるのに対し、EOFは-1としてエンコードされていることを理解しています(少なくともCでは)。 EOFが-1にマップされていることを知る前は、これはEOTの同義語にすぎないと思いました。 EOFがEOTではなく-1にマップされるのはなぜですか?私の知る限り、どちらも同じことをします。つまり、ファイルストリームを終了します。私が認識できる唯一の違いは、EOTがbashシェルのコマンドも終了することです。これら2つのコードの正確な技術的な違いについて説明してください。
承認された回答:
通常、EOFはキャラクターではありません。キャラクターがいないことです。
プログラムがデフォルト設定の正規モードで端末上で実行されている場合(つまり、stdioのみを使用するプレーンCプログラム)、ASCII文字のEOTは表示されません。ターミナルドライバはその文字を認識し、EOF条件を作成します(低レベルでは、read()
からの戻り値は0です。 )。 stdioライブラリは、そのEOF条件を、問題の関数(EOF
)に適切な戻り値に変換します。 getchar()
のマクロ 、fgets()
のnullポインタ 、など)
EOF
の数値 マクロはCライブラリ以外では関係がなく、EOF条件の意味の理解に影響を与えることはありません。