반응형
출처 : http://kldp.org/node/60433


C언어에서 \n 과 \r 의 차이는 무엇인가요

C++에서는 \n와 endl이 있던데 이것또한 정확한 차이를 못느끼겠습니다.

   printf("1test1\n");
   printf("2test2\r");
   printf("3test3\n\r");

위와 같이 테스트했더니만은
1test1
3test3

만 나오고 2test2는 어디로 사라져버리네요!...

C 언어에서 각 escape sequence의 뜻은 다음과 같습니다:
- '\n' (newline) 다음 줄 맨 처음으로 감.
- '\r' (carriage return) 현재 줄 처음으로 감.
그리고 대부분 *nix 시스템에서 newline을 '\n'로서 파일 시스템에 기록하고 해석합니다. (따라서 C 언어의 정의와 충돌나지 않습니다.)

DOS, Windows 시스템에서 newline은 두개의 제어 문자인 '\r\n'으로 파일 시스템에 기록하고 해석합니다. 따라서 C 언어의 정의와 충돌합니다. 그래서 이런 파일들을 적절히 해석하기 위해서 fopen(3)의 두번째 인자로 'b'를 쓰지 않았다면, C 라이브러리 수준에서 파일 시스템의 '\r\n'의 두 문자를, 프로그램에서 '\n'으로 인식할 수 있게 해 줍니다. 그러나 이 경우, 두개의 제어 문자를 하나의 문자로 인식하기 때문에, 파일 크기를 다루는 등의 상황에서 문제를 일으킬 수 있습니다. 이럴 때 fopen(3)의 두번째 인자에 'b'를 추가하면, 이러한 번역 과정을 거치지 않고 직접 '\r\n'을 다룰 수 있습니다.

ASCII 코드를 채택하는 대부분의 시스템의 터미널에서 'RETURN', 'ENTER' 등의 키를 누르면 '\r'이 발생하며, 이 것은 device driver를 통해서 운영 체제가 적절하게 해석합니다. (대부분 newline으로 해석)

반응형

'C & C++ 관련' 카테고리의 다른 글

터미널 제어 termios  (0) 2008.08.17
가변인수 연습 va_  (0) 2008.08.15
Pthread API Reference  (0) 2008.08.15
Posted by Real_G