자문자답- 맞는지 틀린지 확인부탁드립니다.
29 câu hỏi đã được viết
강의 내용 중에 궁금한 점이 있어 질문드립니다.#include <stdio.h>
int main(void)
{
char szName[32] = { 0 };
int nAge = 0;
printf("나이를 입력하세요. : ");
scanf_s("%d", &nAge);
printf("이름을 입력하세요 : ");
gets_s(szName, sizeof(szName));
return 0;
}
처음에는 szName과 nAge는 서로 다른 변수이므로 각각 다른 메모리 주소를 갖는다고 생각했습니다.
그래서 scanf_s("%d", &nAge)를 호출하면 사용자가 입력한 값이 nAge의 메모리 주소에 저장되고, gets_s(szName, sizeof(szName))를 호출하면 입력한 값이 szName의 메모리 주소에 저장되므로, 두 변수는 서로 다른 메모리 공간을 사용하기 때문에 scanf_s()에서 입력받은 \n이 gets_s()에 영향을 주지 않을 것이라고 생각했습니다.
하지만 실제로는 scanf_s()로 나이를 입력한 뒤 gets_s()가 별도의 입력을 받지 않고 바로 종료되었습니다. 강의에서 설명해 주신 내용처럼 scanf_s()가 남겨 놓은 \n을 gets_s()가 읽었기 때문이라고 이해했습니다.
이 부분이 궁금해서 따로 찾아보며 아래와 같이 이해했는데, 제가 이해한 내용이 맞는지 확인 부탁드립니다.
-szName과 nAge는 서로 다른 메모리 주소를 갖는다.
-하지만 scanf_s(), gets_s()와 같은 입력 함수들은 각 변수의 메모리에서 직접 입력을 받는 것이 아니라, 공통으로 사용하는 stdin 입력 버퍼 에서 데이터를 읽는다.
-즉, 키보드 입력은 먼저 stdin의 입력 버퍼에 저장되고, scanf_s()와 gets_s()는 이 동일한 입력 버퍼에서 필요한 만큼 데이터를 읽어 각각 nAge와 szName에 저장한다.
-따라서 scanf_s("%d", &nAge)는 숫자만 읽고 \n은 입력 버퍼에 남겨 두며, 이후 gets_s()가 같은 입력 버퍼에서 남아 있던 \n을 읽어 바로 종료된다.
제가 위와 같이 이해한 것이 맞는지 확인 부탁드립니다.
Câu trả lời 0
메모리 동적할당시 메모리창 빨간 글씨
0
27
2
리눅스로 진행해도 될까요?
0
36
2
sizeof는 컴파일 타임 연산자라서 CPU를 사용치 않는다
0
33
2
scanf("%d\n") 의미
0
52
2
주소 연산자(&) 간접 지정자(*) 반대 개념
0
66
2
Virtual Memory, Memory, Memory mapping tables
0
83
2
샘플코드 출력 오류 발생 질문드립니다
0
85
2
값의 교환에 사용되는 변수의 위치.
0
109
2
메모리 비교에 관한 질문
0
94
2
문자열 Null
0
74
1
C, C++
0
104
2
문자열 입출력 코드 에러
0
74
2
선생님! 120화 2분 50초 질문입니다.
0
76
1
caller 가 메모리 할당 해제를 할 때의 문제점 질문
0
71
2
단축키 맞는지 여부 문의드립니다.
0
67
2
문자열을 사용하는 이중 포인터에 대하여 질문합니다
0
74
1
char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요
0
88
2
용어 설명 필요
0
65
2
stdin, stdout
0
79
2
필수 실습 (최댓값을 반환하는 함수)
0
102
2
아......ㅠㅠ
0
112
2
버퍼 내 엔터
0
84
1
2진수 뺄셈에서 carry-out
0
128
2
union 식별자는 실무에서 보통 어디에서 사용하나요?
0
89
2

