[英]Why does fgetc function add a carriage return
我正在讀取由字符組成的TXT文件,並將這些字符的ASCII值寫入output.txt。
每當我在ASCII表(換行)中讀取char號10時,我在輸出文件中得到的是13,然后是10,而不是10。 (13表示ASCII格式的回車)
這是我的代碼:
in_file = fopen(FILE_NAME, "rb");
...
while((ch = fgetc(in_file)) != EOF){
count++;
fprintf(p, "%d\n", ch);
}
謝謝
輸入文件已使用Windows換行符格式化,換行符是\\r\\n
的一對字符。 UNIX文本文件僅具有\\n
。 因此,您的輸出是正確的。
字符10是換行符( \\n
); 字符13是回車符( \\r
)。 Windows行終止符通常是回車符,后跟換行符。 在UNIX / Linux上,行終止符通常只是換行符。 在Mac OS上,它過去只是一個回車IIRC,但在OS X上可能不再是這種情況了(因為它是引擎蓋下的UN * X)。
如@jazzbassrob所述,該文件可能已在Windows系統上創建。
或者,如果您在Windows系統上運行,我相信I / O庫功能的某些實現會將UNIX樣式的行終止符轉換為Windows樣式。
因此,正如其他張貼者所指出的那樣,輸出結果可能是正確的。
編輯:
嘗試從對fopen()
的調用中刪除b
; 以二進制模式打開文件。 在“文本”模式下,即fopen(FILE_NAME, "r")
, fgetc()
可能會放棄回車符。
編輯2:在文本模式下,行終止符應“規范化”到換行符(如@DevSolar指出)。 另一方面,如果您以二進制模式打開文件,則不應假定或依靠特定字符作為行終止符。 (除非您控制輸入文件的創建,否則您特別擔心要從一種格式轉換為另一種格式,等等。)
您讀取了回車符( 0x0d
),因為您以二進制模式"rb"
讀取了文件,因此fgetc()將讀取每個字符,包括0x0d
和0x0a
(回車符)。
如果以文本"r"
打開文件,則fgetc()將跳過0x0d
如果后面跟着0x0a
並且僅顯示0x0a
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.