簡體   English   中英

為什么fgetc函數添加回車符

[英]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()將讀取每個字符,包括0x0d0x0a (回車符)。

如果以文本"r"打開文件,則fgetc()將跳過0x0d如果后面跟着0x0a並且僅顯示0x0a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM