top of page

Line Separator 줄 구분자의 중요성 (LF, CR, CRLF) 그리고 scanf

by Kain, Kaite: 2024-06-05


summary: LF, CR, CRLF which distinguish new lines (3 styles) and gcc scanf error troubleshooting



title

Line Separator, 줄 구분자.


{'\n', '\r', "\r\n"}


생각보다 중요했던 개념이기에 정리합니다.



















































lines


'\n' 우리가 모르고 썼던 줄 구분자입니다.


코딩에 입문할 때 뭣 모르고 우선 특수문자입니다 하고 배웠던 이 문자가 줄 구분자인 것이죠.



'\n' == '역슬래시 n'은 코드에서 우리가 키보드를 통해 Enter Key(엔터 키)를


누른 것과 같은 효과를 낳습니다.


이 방식을 LF이라고 합니다.


대부분의 IDE는 LF 방식으로 default가 잡혀 있죠.


vs code's default

자, 전에 보여드렸던 vs code에도 LF라고 설정되어 있습니다.


이 방식은 리눅스와 UNIX 계열의 OS에서 쓰는 것으로 커서 == 현재 위치한 줄 아래로


이동시켜줍니다.



before after of LF

(왼쪽: before) (오른쪽: after)


커서가 계속 맨 끝에 있죠?
















\r


그래서 나온 다른 방식이 '\r'.


CR 방식입니다.


'\r' 도 line separator입니다.


이 친구는 '\n'과 달리 커서를 맨 앞(left)으로 옮겨주죠.




before after of CR

이렇게 됩니다.


(Classic MacOS 운영체제(OS)에서 쓰는 방식)


…하지만 이건 우리가 바라는 결과가 아니잖아요?


그래서 두 개를 결합합니다.

















before after of CRLF, what we wanted truely

먼저 CR, 커서를 으로 당기고


다음으로 LF, 커서를 한 줄 아래로 이동시킵니다. (on Windows)



(들여쓰기는 에디터상 일어나는 것이라 일어나지 않습니다.


실제로 컴파일러는 들여쓰기를 무시하므로 없어도 괜찮습니다.)



이것이 바로 CRLF 방식.


LF 방식으로 설정되어 있었을 때 컴파일이 안 되는 오류를 고칠 수 있는 설정 방식입니다.



주로 네트워크 코드CRLF 방식으로 줄을 바꾸어 소켓에 문자열을 전달하는데요.


저도 위와 같은 방식으로 전달하는 것을 직접 확인했습니다.

























gcc scanf error

gcc를 쓰다보면 꽤 많은 에러를 접하게 됩니다.


그 중 하나는 scanf 에러인데요.



scanf() 함수는 공백 문자(띄어쓰기) 혹은 '\n'을 기준으로 매개인자 값을 구분합니다.


그런데 특정 에디터에서 scanf로 두 개 이상의 매개인자사용자로부터 입력 받으려다


한 개는 잘 받는데 두 번째부터 값이 들어오지 않는 에러가 발생할 때가 있습니다.




change the line separator type into CRLF

에디터 설정을 바꾸어 주세요.


CRLF으로 바꾸면



now we're ready

적용되어 정상적으로 값을 받습니다.


cmd/terminal 에서 문제가 발생하면 알려주세요.








































conclusion

CRLF 방식은 줄 구분자 '\r', '\n'을 두 개 쓰기 때문에 2 Byte의 데이터를 먹습니다.


그렇기 때문에 줄만 한 줄 아래로 이동시키는 LF (only '\n') 방식이 선호될 때도 있죠.


그러나 특정 모듈이 CRLF 방식으로 설정되어 있지 않으면 문자열 명령어를 인식할 수 없어서


오류에 빠지기도 합니다.



이처럼 가장 기초적인 줄 처리 방식도


모르고 볼 때랑 알고 나서 볼 때가 많이 다른데요.


사용자 입장에서는 개의치 않는 것이 개발자 입장에서는 생각할 거리가 되는 게 신기합니다.



여러분은 어떤 방식이 좋아 보이시나요?


선호하는 방식에 따라 OS, Editor, Language, module을 결정하는 등


다양한 사고 방식이 있을 것 같습니다:)








Comments


  • Facebook
  • Twitter
  • LinkedIn

©2024 by Kaite. Created with Wix.com

bottom of page