inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

독하게 시작하는 C 프로그래밍

문자, 정수 입력과 개행문자 제거

나이, 이름 입력 예시에서 scanf_s() 함수 사용 이후 gets_s() 함수 사용 시 오류

해결된 질문

417

ssa3327

작성한 질문수 2

0

gets_s() 함수가 키보드 추상화 파일의 버퍼에서 null이 나올 때까지 문자열을 가져오는 함수잖아요.

scanf_s() 함수를 통해 5\n 이 저장되었다고 했을 때, %*c를 통해 \n을 제거하지 않으면 gets_s() 함수는 \n이 들어있어서 입력을 중지하는 거라고 이해했습니다.

여기서 질문입니다. null이랑 \n 이랑 다르다고 알고 있는데 왜 null 이 나온 것처럼 gets_s() 함수가 수행되지 않는지 궁급합니다!!
감사합니다. (꾸벅)

c 컴퓨터-구조 assembly-language vc++

답변 3

1

널널한 개발자

null 문자열의 끝이라고 간주되는 경우는 문자열 상수 같은 것으로 한정됩니다. 문자열을 다루는 함수들이 문자열의 끝을 null이라 가정하기 때문에 결과적으로 그렇게 된 것입니다. 그러나 특수한 상황에서 구분자를 null이 아닌 \n을 사용한다는 것 자체는 아무런 문제가 없습니다. 그것은 그렇게 하기로 결정하고 코드를 작성하면 그만 이기 때문입니다.

결론은 개발자 마음입니다. 😄

1

ssa3327

답변 감사합니다!! 강의 잘 듣고 있습니다.

질문을 하나 드려도 될까요?? 제가 6개월 전에 자료구조 과목을 학교에서 수강했는데 혹시 자료구조 강의를 한 번 더 듣는 걸 추천하시는지 여쭤봐도 될까요??

항상 감사합니다~ 커리큘럼 잘 따라가고 있습니다 ㅎㅎ

0

널널한 개발자

댓글 확인이 좀 늦어서 답변이 함께 늦어졌습니다.

이미 자료구조를 공부하신 상황이라면 수업 내용 중 50~60% 정도는 크게 도움이 되지 않을 수 있습니다. 그러나 나머지 부분은 기존의 자료구조에서는 다루지 않는 내용들입니다. 공부하는 것이 좋긴 합니다만 가성비가 떨어질 수 밖에 없는 상황임을 감안하는 것이 좋겠습니다. 감사합니다. 😄

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

ssa3327님의 질문에 대해 답변드리겠습니다.

gets_s() 함수는 정말로 문자열을 끝낼 때까지, 즉 null 문자(\0)가 나올 때까지 입력을 받습니다. 하지만 여기서의 문제는 scanf_s() 함수로 인해 발생합니다. scanf_s() 함수로 입력을 받고 난 뒤, 입력 버퍼에 남아있는 개행 문자(\n) 때문에 gets_s() 함수가 더 이상의 입력 없이 바로 개행 문자를 만나 종료되는 것입니다.

gets_s()는 개행 문자를 문자열의 종료로 인식하며 이를 버퍼에서 제거하고, 입력 종료로 처리합니다. 따라서, null과 \n은 목적과 취급 방식에서 차이가 있으나, gets_s() 함수는 개행 문자를 만나면 추가적인 사용자 입력 없이 입력을 끝내게 됩니다. scanf_s() 함수 이후에 gets_s() 함수를 사용할 때는 %*c를 사용하여 개행 문자를 명시적으로 제거하는 것이 중요합니다.

scanf_s()gets_s()를 함께 사용할 때의 이슈는 버퍼 내 남아있는 개행 문자를 적절히 처리하지 않아 생기는 문제로, 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