• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

scanf 사용 시, null이 먼저 들어가고 \n이 나중에 들어 가는건가요?

24.01.31 16:14 작성 24.01.31 16:19 수정 조회수 149

0

버퍼 공부하다가 궁금합니다.

제가 이해한 바로는

\n은 I/O 버퍼를 비우기 위해 사용하는 이스케이프 시퀀스 라고 이해했습니다.

string에서

char Id[7] = {1} 라고 초기화를 주고

scanf("%s",Id); 이라고하고 코드를 작성합니다.

작성한 코드를 프로그램에 컴파일 한 이후 런 타임때,

"null" 을 입력하고 엔터를 치면

Id의 0번 주소의 값은

n

1번 주소의 값은

u

2번 주소의 값은

l

3번 주소의 값은

l

이 됩니다.

그렇게 하고 개행 문자인 엔터를 칩니다.

 

이때 여기서 궁금증이 생깁니다.

버퍼안에 \0와 \n 어느 게 먼저 들어가는 건가요?

 

\0 을 이용해서 문자열을 모두 읽었다고 표시를 한다고 이해했습니다.

이렇게 하고 엔터를 치면

개행 문자 \n이 들어가는데

실제 메모리 상에서는

null\01\n 으로 찍히는지 궁금합니다.

 

답변 1

답변을 작성해보세요.

0

입력 버퍼에 '\0'은 들어가지 않습니다. '문자열의 끝은 null'이라는 것은 문자(배)열인 경우에 해당합니다. 물론 문자열 상수도 포함됩니다. 가변길이 문자열의 끝을 명시하기 위한 것이지만 일반적인 입출력 버퍼에서도 그런 규칙이 유지되는 것은 아닙니다. 대표적으로 입력 버퍼가 그렇습니다. null로 끝나지 않습니다. 참고하시기 바랍니다. 😄