2013-03-20 1 views
1

텍스트 파일 "hello.txt"에 샘플 텍스트가 있습니다. 16 진수 편집기에서 파일을 열면 \ r \ n 개행 문자를 볼 수 있습니다. 그러나 getc()를 사용하여 C 프로그램에서 파일을 읽을 때 \ r이 사라지고 \ n 문자 만 보입니다.getc()는 carrige return ' 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; 
} 

출력 : 16 진수 편집기에서 본

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

파일 :

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

볼 수 있듯이 0D0A는 getc() 함수를 사용할 때만 0A로 출력됩니다.

getc()가 '\ r'문자를 사용하지 않는 이유는 무엇입니까? 주어진 파일에서 \ r \ n ~ \ n에 대한 변환없이 정확한 데이터를 반환하려면 어떻게해야합니까?

+1

바이너리 모드'rb "로 열어서''\ r ''을 얻으십시오. –

+0

감사합니다. 그것은 효과가있다! :) –

답변

5

:

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

기본, 텍스트를 모드는 단일 문자로 \r\n를 종료 DOS/윈도우 라인을 변환합니다.

+0

고마워요. 나는이 모든 동안 getc()를보고 있었다. 나는 읽기 모드가 이것에 영향을 미칠 것조차 의심하지 않았다. –

2

파일을 텍스트 모드 fp = fopen("hello.txt", "r");에서 열어 놓은 경우 문자를 미리 입력하면 0x0A 문자는 무시됩니다. 당신이 모드에서 파일을 열어야합니다 Windows의

2

fp = fopen("hello.txt", "rb"); 시도 - 오픈 모드에서 'b'으로, 파일은 (플랫폼에 따라)/정규화 라인 엔딩을 변환합니다 '테스트 모드'단순히 \n에 열립니다.

관련 문제