2013-03-20 71 views
1

我有一個帶有一些示例文本的文本文件「hello.txt」。當我在十六進制編輯器中打開文件時,可以看到換行符的\ r \ n字符。但是當我用getc()在C程序中讀取文件時,\ r某種程度上消失了,我只能看到\ n字符。getc()不返回carrige返回' r'字符

我試圖在網上搜索和在stackoverflow但沒有運氣。

hello.txt的

Sample 
File 

代碼:

#include <stdio.h> 

int main() 
{ 
    FILE *fp; 
    fp = fopen("hello.txt", "r"); 

    int character = 0; 

    while((character = getc(fp)) != EOF) 
    { 
     printf("%.2X ", character); 
    } 

    return 0; 
} 

輸出:從十六進制編輯器看到

53 61 6D 70 6C 65 0A 46 69 6C 65 

文件:

53 61 6D 70 6C 65 0D 0A 46 69 6C 65 

可以看出,使用getc()函數時,0D0A僅輸出爲0A。

爲什麼getc()避免'\ r'字符?我怎樣才能得到它返回給定文件中的EXACT數據,即\ r \ n沒有任何轉換爲​​\ n?

+1

嘗試在二進制模式下打開它,使用''rb「'來獲得''\ r''s。 – 2013-03-20 15:46:56

+0

謝謝。有效 ! :) – 2013-03-20 15:52:50

回答

5

在Windows上,您必須在二進制模式打開文件:

fp = fopen("hello.txt", "rb"); 

默認,文本模式,轉換的DOS/Windows行結束\r\n成單個字符。

+0

謝謝。我一直在看着getc()。我甚至沒有懷疑讀取模式會影響到這一點。 – 2013-03-20 15:54:36

2

如果在文本模式下打開文件fp = fopen("hello.txt", "r");,則0x0D字符如果預設0x0A字符將被忽略。

2

嘗試fp = fopen("hello.txt", "rb"); - 'b'處於開放模式,文件以「測試模式」打開,該模式將行結束符(取決於平臺)轉換/標準化爲簡單的\n