使用C標準庫stdio.h
,我讀到要輸出ASCII /文本數據,應該使用模式"w"
並輸出二進制數據,應該使用"wb"
。但爲什麼區別?爲什麼在輸出可以是非ASCII時使用fopen()模式'b'(stdio.h)?
在這兩種情況下,我只是輸出一個字節(char)數組,對吧?如果我以ASCII模式輸出一個非ASCII字節,程序仍然輸出正確的字節。
使用C標準庫stdio.h
,我讀到要輸出ASCII /文本數據,應該使用模式"w"
並輸出二進制數據,應該使用"wb"
。但爲什麼區別?爲什麼在輸出可以是非ASCII時使用fopen()模式'b'(stdio.h)?
在這兩種情況下,我只是輸出一個字節(char)數組,對吧?如果我以ASCII模式輸出一個非ASCII字節,程序仍然輸出正確的字節。
某些操作系統 - 大多數名爲「windows」 - 並不能保證它們將讀寫文件的方式完全按照傳入的方式寫入文件。因此,在窗口中,它們實際上將\ r \ n映射到\ n。在讀寫ascii時,這很好,很透明。但它會破壞二進制數據流。基本上,只要總是給窗口'b'標誌,如果你想它忠實地讀取和寫入文件的數據完全符合你通過它的方式。
以ASCII輸出時可能會發生某些轉換(例如,當輸出的字符是新行時輸出neline +回車) - 取決於您的平臺。當使用二進制格式時,這種轉換不會發生。
自動換行。 BARF。 –
http://wiki.answers.com/Q/What_is_the_difference_between_binary_file_and_text_file_in_c_language – m0skit0
除非您的目標是使古老版本的Windows記事本中的文件正確顯示,否則您應該始終使用''b「'選項。文本模式不同於二進制模式只會讓你的生活變得糟糕。如果您需要使用CR支持舊文本文件,只需在解析器中剝離CR;如果你使用'scanf',它會忽略它作爲空白跳過的一部分。 –