Tuesday, April 17, 2007
C언어] printf 함수 CR-LF 줄바꿈, 개행문자(Newline), 엔터(Enter)키 출력 방법
C에서는 "\n" 즉, 백슬래시+소문자n으로 줄바꿈을 합니다. 줄바꿈이라는 것은, 말 그대로, 문장의 끝에서 다음줄로 엔터 키를 치는 것입니다. "\n" 이라는 문자를 사용하면 자동으로 엔터키가 쳐지게 됩니다.
문자열의 일부로서 "\n" 을 사용하면, 운영체제의 종류에 따라 자동으로 줄바꿈 문자 즉 개행문자가 출력됩니다.
* 유닉스(Unix)/리눅스(Linux)에는, LF (헥사로는 0x0A에 해당) 문자로 줄바꿈을 하고
* 도스(DOS)/윈도우(Windows)에서는, CR-LF (헥사로는 0x0D 0x0A에 해당) 라는 2문자로 줄바꿈을 하고
* 맥(Mac)에서는, CR (헥사로는 0x0D 에 해당) 로 줄바꿈합니다. "\r" 로 표현합니다.
실제로 어떤 개행문자가 출력될지는 컴파일러가 알아서 합니다. 따라서 "\n"만 사용하면 자동으로 줄바꿈이 됩니다.
다음 예제는, 윈도우에서 각종 개행문자들을 출력하는 소스입니다. 윈도우의 기본 개행문자인 0D 0A 로도 출력하고, 다른 운영체제의 개행문자로도 강제로 출력해 봅니다. 그러나 유닉스 개행문자는 잘 출력이 되지 않는군요.
소스 파일명: example.cpp
개행문자는 눈에 보이지 않기 때문에, 다음과 같이 파일로 저장한 후, "헥사 뷰어"나, "헥사 에디터"로 보아야 알 수 있습니다. (다만 울트라에디트의 헥사 모드로는 제대로 보이지 않습니다.)
▶▶ C언어/Perl] printf() 함수의 포맷 스트링 %s, %d - Format Specifier
참고: ▶▶ C언어] 헥사 뷰어 소스, 헥사 덤프 만들기; Hex View, File Dump Source Code
☞ 줄바꿈 | 개행 문자
문자열의 일부로서 "\n" 을 사용하면, 운영체제의 종류에 따라 자동으로 줄바꿈 문자 즉 개행문자가 출력됩니다.
* 유닉스(Unix)/리눅스(Linux)에는, LF (헥사로는 0x0A에 해당) 문자로 줄바꿈을 하고
* 도스(DOS)/윈도우(Windows)에서는, CR-LF (헥사로는 0x0D 0x0A에 해당) 라는 2문자로 줄바꿈을 하고
* 맥(Mac)에서는, CR (헥사로는 0x0D 에 해당) 로 줄바꿈합니다. "\r" 로 표현합니다.
실제로 어떤 개행문자가 출력될지는 컴파일러가 알아서 합니다. 따라서 "\n"만 사용하면 자동으로 줄바꿈이 됩니다.
다음 예제는, 윈도우에서 각종 개행문자들을 출력하는 소스입니다. 윈도우의 기본 개행문자인 0D 0A 로도 출력하고, 다른 운영체제의 개행문자로도 강제로 출력해 봅니다. 그러나 유닉스 개행문자는 잘 출력이 되지 않는군요.
소스 파일명: example.cpp
#include <stdio.h>
int main(void) {
printf("운영체제 종류에 따라 자동 줄바꿈(AUTO)\n");
// 비주얼C에서는 당연히, 줄바꿈이 0D 0A 로 출력
printf("강제로 유닉스 줄바꿈 (LF) 으로%c", 0x0A);
// 원래는 0A 로 나와야 하지만
// 비주얼C에서는 역시 줄바꿈이 0D 0A 로 출력
printf("강제로 맥용 줄바꿈 (CR) 으로\r");
// 이 경우, 비주얼C에서는 줄바꿈이 0D 로 출력
return 0;
}
int main(void) {
printf("운영체제 종류에 따라 자동 줄바꿈(AUTO)\n");
// 비주얼C에서는 당연히, 줄바꿈이 0D 0A 로 출력
printf("강제로 유닉스 줄바꿈 (LF) 으로%c", 0x0A);
// 원래는 0A 로 나와야 하지만
// 비주얼C에서는 역시 줄바꿈이 0D 0A 로 출력
printf("강제로 맥용 줄바꿈 (CR) 으로\r");
// 이 경우, 비주얼C에서는 줄바꿈이 0D 로 출력
return 0;
}
개행문자는 눈에 보이지 않기 때문에, 다음과 같이 파일로 저장한 후, "헥사 뷰어"나, "헥사 에디터"로 보아야 알 수 있습니다. (다만 울트라에디트의 헥사 모드로는 제대로 보이지 않습니다.)
D:\Z>cl example.cpp && example > out.txt
example.cpp
D:\Z>hexdump.pl out.txt
00000000: BF EE BF B5 C3 BC C1 A6 20 C1 BE B7 F9 BF A1 20 ........ ......
00000010: B5 FB B6 F3 20 C0 DA B5 BF 20 C1 D9 B9 D9 B2 DE .... .... ......
00000020: 28 41 55 54 4F 29 0D 0A B0 AD C1 A6 B7 CE 20 C0 (AUTO)........ .
00000030: AF B4 D0 BD BA 20 C1 D9 B9 D9 B2 DE 20 28 4C 46 ..... ...... (LF
00000040: 29 20 C0 B8 B7 CE 0D 0A B0 AD C1 A6 B7 CE 20 B8 ) ............ .
00000050: C6 BF EB 20 C1 D9 B9 D9 B2 DE 20 28 43 52 29 20 ... ...... (CR)
00000060: C0 B8 B7 CE 0D .....
D:\Z>
example.cpp
D:\Z>hexdump.pl out.txt
00000000: BF EE BF B5 C3 BC C1 A6 20 C1 BE B7 F9 BF A1 20 ........ ......
00000010: B5 FB B6 F3 20 C0 DA B5 BF 20 C1 D9 B9 D9 B2 DE .... .... ......
00000020: 28 41 55 54 4F 29 0D 0A B0 AD C1 A6 B7 CE 20 C0 (AUTO)........ .
00000030: AF B4 D0 BD BA 20 C1 D9 B9 D9 B2 DE 20 28 4C 46 ..... ...... (LF
00000040: 29 20 C0 B8 B7 CE 0D 0A B0 AD C1 A6 B7 CE 20 B8 ) ............ .
00000050: C6 BF EB 20 C1 D9 B9 D9 B2 DE 20 28 43 52 29 20 ... ...... (CR)
00000060: C0 B8 B7 CE 0D .....
D:\Z>
▶▶ C언어/Perl] printf() 함수의 포맷 스트링 %s, %d - Format Specifier
참고: ▶▶ C언어] 헥사 뷰어 소스, 헥사 덤프 만들기; Hex View, File Dump Source Code
☞ 줄바꿈 | 개행 문자
tag: cpp
C언어 | C/C++ (Visual C++)
좋은 정보 감사합니다^_^
June 11, 2009 에
z980 님 ( https://www.blogger.com/profile/07804420475084944332 ) 께서
주신 댓글의 한글이 깨져서 다시 올립니다.
이하 댓글의 내용:
맥에서 \r을 사용하는건 OS 9.x 까지였고
OS X부터는 \n을 사용한다고 합니다.
출처: https://en.wikipedia.org/wiki/Newline
<< Home