2011-11-03 29 views
-1

這裏我感到困惑fopen("filename.txt","rb")fopen("filename.txt","r")混淆fopen()函數的功能選項閱讀bianry和閱讀的文本

所以,當我想的想法有關本詳細

+0

@downvoter你爲什麼放棄投票。我是新的堆棧溢出,我是C編程語言堆棧溢出的初學者幫助我們。所以你爲什麼放棄投票。讓它關閉這個問題,如果它是重複的 –

+0

我不是downvoter,但它是一個問題,它不適合[so faq](http://stackoverflow.com/faq)。這是非常開放的,沒有真正的答案。我很驚訝它沒有收到太近的選票。 – tinman

回答

2

如果你讀的人,其使用爲fopen()頁面,你會發現:

模式字符串也可以包括字母「b」無論是作爲最後一個字符,或在上述任何兩個字符串的字符之間的字符。這完全是爲了與C89兼容而沒有任何影響;在所有符合POSIX標準的系統(包括Linux)上忽略'b'。 (其他系統可能會以不同的方式處理文本文件和二進制文件,如果您對二進制文件執行I/O操作並希望將程序移植到非Unix環境中,則添加'b'可能是個好主意。)

0

這基本上是你正在運行的環境的一個問題。在非二進制模式下甚至在二進制模式下(儘管以更有限的方式),環境被允許在某些情況下修改數據。

C標準是這樣說的關於兩種,從C99 7.19.2 Streams(我的粗體顯示):

2/A文本流是由爲行字符的有序序列,每個線 包括零個或多個字符加一個終止的換行符。 最後一行是否需要終止換行字符是實現定義的。

可能需要在輸入和輸出上添加,更改或刪除字符,以符合在主機環境中表示文本的不同約定。因此,流中的字符與外部表示中的字符之間不需要一一對應。

數據從文本流中讀取在將必然比較等於較早前寫出到該流僅當該數據 :數據僅包括打印 字符和控制字符水平製表和新行的;沒有換行字符 緊接在空格字符前面;最後一個字符是換行符。 在讀入時出現在換行符 之前的空格字符是否是實現定義的。

3 /二進制流是一個有序的字符序列,可以透明地記錄內部數據。 在相同的實現下,從二進制流中讀入的數據應該與以前寫入該流的數據相比較,等於 。但是,這樣的流可能具有實現定義數量的空字符,並附加到流的末尾 。

所以,基本上,如果你想最大限度地提高你的數據不被修改的機會,使用二進制模式。如果你遵循文本模式的規則,你可以毫不畏懼地使用它。