C標準ライブラリstdio.h
では、ASCII /テキストデータを出力するにはモード"w"
を使用し、バイナリデータを出力するにはを使用する必要があることを読みました"wb"
。しかし、なぜ違いがあるのでしょうか。
どちらの場合も、バイト(char)配列を出力しているだけですよね?また、ASCIIモードで非ASCIIバイトを出力した場合でも、プログラムは正しいバイトを出力します。
一部のオペレーティングシステム(主に「windows」という名前)は、ファイルに渡す方法とまったく同じようにASCIIの読み取りと書き込みを行うことを保証しません。したがって、Windowsでは、実際に\ r\nを\nにマップします。これは、ASCIIを読み書きするときに問題なく透過的です。しかし、それはバイナリデータのストリームをゴミ箱に捨てるでしょう。基本的に、渡したとおりにデータをファイルに忠実に読み書きしたい場合は、常にウィンドウに「b」フラグを付けます。
プラットフォームに応じて、ASCIIで出力するときに実行できる特定の変換があります(たとえば、出力された文字が改行の場合は、neline +carriage-returnを出力します)。バイナリ形式を使用する場合、このような変換は行われません。