인프런 커뮤니티 질문&답변

ssa3327님의 프로필 이미지
ssa3327

작성한 질문수

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

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

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

해결된 질문

작성

·

283

0

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

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

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

답변 3

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

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

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

ssa3327님의 프로필 이미지
ssa3327
질문자

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

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

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

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

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

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

0

안녕하세요, 인프런 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 문자의 처리와는 별개의 문제입니다.

질문에 도움이 되었기를 바랍니다. 추가적인 질문이 있으시면 언제든지 문의해주세요.

ssa3327님의 프로필 이미지
ssa3327

작성한 질문수

질문하기