해결된 질문
작성
·
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을 사용한다는 것 자체는 아무런 문제가 없습니다. 그것은 그렇게 하기로 결정하고 코드를 작성하면 그만 이기 때문입니다.
결론은 개발자 마음입니다. 😄
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 문자의 처리와는 별개의 문제입니다.
질문에 도움이 되었기를 바랍니다. 추가적인 질문이 있으시면 언제든지 문의해주세요.
답변 감사합니다!! 강의 잘 듣고 있습니다.
질문을 하나 드려도 될까요?? 제가 6개월 전에 자료구조 과목을 학교에서 수강했는데 혹시 자료구조 강의를 한 번 더 듣는 걸 추천하시는지 여쭤봐도 될까요??
항상 감사합니다~ 커리큘럼 잘 따라가고 있습니다 ㅎㅎ