scanf 사용 시, null이 먼저 들어가고 \n이 나중에 들어 가는건가요?
버퍼 공부하다가 궁금합니다.
제가 이해한 바로는
\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로 끝나지 않습니다. 참고하시기 바랍니다. 😄
scanf("%d\n") 의미
0
19
1
주소 연산자(&) 간접 지정자(*) 반대 개념
0
32
1
Virtual Memory, Memory, Memory mapping tables
0
50
1
샘플코드 출력 오류 발생 질문드립니다
0
62
2
값의 교환에 사용되는 변수의 위치.
0
87
2
메모리 비교에 관한 질문
0
80
2
문자열 Null
0
62
1
C, C++
0
87
2
문자열 입출력 코드 에러
0
60
2
선생님! 120화 2분 50초 질문입니다.
0
66
1
caller 가 메모리 할당 해제를 할 때의 문제점 질문
0
63
2
단축키 맞는지 여부 문의드립니다.
0
59
2
문자열을 사용하는 이중 포인터에 대하여 질문합니다
0
65
1
char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요
0
78
2
용어 설명 필요
0
56
2
stdin, stdout
0
70
2
필수 실습 (최댓값을 반환하는 함수)
0
92
2
아......ㅠㅠ
0
99
2
버퍼 내 엔터
0
71
1
2진수 뺄셈에서 carry-out
0
111
2
union 식별자는 실무에서 보통 어디에서 사용하나요?
0
79
2
필수실습문제 공부법 (진도 vs 복습)
0
103
2
예제파일 다운로드
0
78
2
Visial Studio Code 를 설치해서 사용해도 수업을 따라가는데 지장이 있나요?
0
118
3





