줄바꿈 종류 (LF, CR)


C,C++ 에서 문자열을 처리할 때 줄바꿈을 해야 하는 경우가 있다.

이때 쓰이는것이 라인피드(LF : Line Feed) 와 캐리지리턴(CR: Carriage return) 두 가지가 존재하는데 

각각의 정의와 사용법에 대해서 알아보겠다.


두 종류의 차이와 설명


라인피드(LF : Line Feed) => 현재 위치에서 바로 아래로 이동

캐리지리턴(CR: Carriage return) => 커서의 위치를 앞으로 이동

[각 사용법]

printf("Line Feed \n");

printf("Carriage Retrun \r");


위와 같이 라인피트는 \n을 사용하며 캐리지 리턴은 \r을 사용한다. 

아래 예제를 보면서 이해를 돕도록 하겠다.


[ Carriage Return 예제 ]

...

int main(void)

{

    printf("test\r");

    printf("1004");

}


 실행 결과

 1004


[ Line Feed 예제 ]

...

int main(void)

{

    printf("test\n");

    printf("1004");

}


 실행 결과

 test

 1004





운영체제 마다 줄바꿈 정의



운영체제 마다 줄바꿈 정의가 다르다. 

각 운영체제 마다 정의를 살펴 보자.


윈도우/DOS : CRLF 조합으로 줄바꿈을 정의

Unix/Linux/C : LF 만으로 줄바꿈을 정의


이래서 윈도우에서 작성 된 것을 Unix/Linux 계열로 올리면 vi로 편집했을 때 ^M이 붙는 것을 확인 할 수 있다.

물론 ftp로 올릴 때 방식이 텍스트/2진 어떤 것을 선택하느냐에 따라 달라질 수 있다.

텍스트 방식으로 올리면 데이터 변환이 생겨 /r/n -> /n 으로 된다. 

2진 모드로 올릴때는 변환이 생기지 않아 윈도우에서 작성된 파일이 컴파일이 안되거나 script작성 된것이 동작 안할 수가 있다.


[sftp 전송 방식]

텍스트 방식 : 줄바꿈에 대한 변환이 일어남

2진 모드 : 줄바굼에 대한 변환이 일어나지 않음 ( 문제가 발생할 수 있다. )


반응형

'프로그램 > C' 카테고리의 다른 글

[C] 문자열 단위 입출력 함수 gets(), puts()  (0) 2017.10.01
[C] 문자 입출력 함수 getchar(), putchar()  (0) 2017.09.29
[C] 구조체 배열과 포인터  (0) 2017.07.31
[C] 구조체  (0) 2017.07.24
[C] 포인터와 상수(const)  (0) 2017.07.23

+ Recent posts