4

C標準ライブラリstdio.hでは、ASCII /テキストデータを出力するにはモード"w"を使用し、バイナリデータを出力するにはを使用する必要があることを読みました"wb"。しかし、なぜ違いがあるのでしょうか。

どちらの場合も、バイト(char)配列を出力しているだけですよね?また、ASCIIモードで非ASCIIバイトを出力した場合でも、プログラムは正しいバイトを出力します。

4

2 に答える 2

8

一部のオペレーティングシステム(主に「windows」という名前)は、ファイルに渡す方法とまったく同じようにASCIIの読み取りと書き込みを行うことを保証しません。したがって、Windowsでは、実際に\ r\nを\nにマップします。これは、ASCIIを読み書きするときに問題なく透過的です。しかし、それはバイナリデータのストリームをゴミ箱に捨てるでしょう。基本的に、渡したとおりにデータをファイルに忠実に読み書きしたい場合は、常にウィンドウに「b」フラグを付けます。

于 2012-06-21T16:46:11.403 に答える
0

プラットフォームに応じて、ASCIIで出力するときに実行できる特定の変換があります(たとえば、出力された文字が改行の場合は、neline +carriage-returnを出力します)。バイナリ形式を使用する場合、このような変換は行われません。

于 2012-06-21T15:29:53.007 に答える