로딩
요청 처리 중입니다...

#29 C언어 fgets gets scanf의 차이를 확실히 알려면 \0\n가 뭔지 알아야한다 내가 실험해봤음

 #29 C언어 fgets gets scanf의 차이를 확실히 알려면 \0\n가 뭔지 알아야한다 내가 실험해봤음

우선 \0은 아스키 코드로 0 즉 (int)0이고 \n은 아스키 코드로 10 즉 (int)10이다. 의례 말하는 널, NULL은 \0을 뜻하고 \0은 문자열의 끝을 알려주는 문자이다.

그에 반해 \n는 개행문자 줄바꿈문자라고도 부르며 쉽게 이해하자면 우리가 엔터를 누르면 입력되는 문자이다. \0와 \n를 이해했다면 이제 fgets, gets, scanf에서 \n과 \0이 어떻게 기능하는지 알 수 있다. 먼저 scanf는 엔터(\n)전까지 읽어들인다.

그리고 자동으로 문자열 제일 끝에 \0을 붙여준다. gets는 엔터(\n)를 저장한다. 그런데 자동으로 엔터(\n)를 \0로 바꾼다. scanf 와 gets는 동작원리는 다르나 결과적으로 문자열 뒤에 엔터(\n)를 저장하지 않고 \0을 붙여준다고 이해하면된다. fgets는 특이하다.

엔터(\n)까지 저장하고 \0도 붙여준다. 즉 'abcd' 라는 문자를 저장한다고 하면 scanf함수는 abcd\0로 배열에 저장되고 버퍼에 \n가 남는다....