파일스트림 읽는데 CR문자가 같이 포함되는경우

realrise의 이미지

standard io로 파일을 읽었습니다.
CR과 LF가 LF하나로 안바뀌고 CR이 그대로
남아 있습니다.
읽은 파일은 euc-kr 로 작성된 텍스트파일입니다.
gdb에서 읽은 라인을 출력해보니
개행문자가 \n 가 아니고 \r\n입니다.
원래 \r\n은 stdio에서 \n로 변환되는데요.
왜 이럴까요? 해결법을 좀 알려주세요.

doldori의 이미지

파일은 DOS/Win 형식으로 작성된 것인데 프로그램은 UNIX 환경에서 실행한 듯
합니다. 꽁수이기는 하지만 이런 식으로 하면 될 것입니다.

char line[100];
FILE* fp = fopen("myfile", "r");
while (fgets(line, 100, fp))
{
    size_t len = strlen(line);
    if (len >= 2 && line[len-1] == '\n' && line[len-2] == '\r')
    {
        line[len-2] = '\n';
        line[len-1] = '\0';
    }
}

realrise wrote:
원래 \r\n은 stdio에서 \n로 변환되는데요.

DOS/Win 환경에서 텍스트 모드로 읽을 때만 그렇습니다. 관련된 얘기는
http://groups.google.co.kr/group/han.comp.lang.c/browse_thread/thread/4e2d8b9a352266f5
을 참고하십시오.
익명 사용자의 이미지

친절한 답변 감사드립니다.
윈도우텍스트파일을 ftp에서 ascii모드로
리눅스로 전송하니 0D 0A가
0A로 자동으로 변환되는군요. 간단히 해결됐네요.