• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

scanf_s와 gets_s()의 차이점

24.02.05 00:07 작성 24.02.05 00:13 수정 조회수 311

0

안녕하세요 선생님

섹션9 형식 문자 기반 문자열 입력강의에서

scanf_s와 get_s()의 차이점이 제가 이해하기론

scanf_s는 함수를 작성하고 콘솔창이 생기고 값을 입력할때 값 입력 중간에 white space(스페이스바)를 입력하면 입력이 끊긴다.

ex) 1. '안녕하세요' 는 입력이 되지만

2. '안 녕하세요' 는 '안' 이라는 글자만 입력이 되고 끊긴다.

 

라고 이해를 했는데 맞을까요?

 

get_s()는 이와 반대로 값 입력 중간에 white space(스페이스바)를 입력해도 입력이 유지된다.

 

ex) 1. '안녕하세요' 는 입력 가능

2. '안 녕하세요' 입력하면 '안 녕하세요' 라고 white space까지 입력이 된다.

이게 맞을까요?

 

그리고 혹시 강사님께서 말씀해주신 것 이외에 scanf_s와 gets_s()의 차이점이 있을까요?

 

감사합니다.

답변 2

·

답변을 작성해보세요.

0

네, 맞습니다. scanf_s() 함수는 공백문자를 구분자로 사용합니다. 그러나 gets_s() 함수는 입력 완료를 개행문자('\n')로 식별합니다. 그러므로 공백(Space)은 문자로 간주해 표준 입력 버퍼에서 읽어 옵니다. 그 외 다른 차이점은 신경 쓸 필요는 없겠습니다. scanf_s() 함수가 형식문자를 이용해 입력을 받는 것은 기능에 해당하며 이 가운데 문자열에 대한 것이 gets_s()와 겹치는 부분입니다.

그런데 scanf_s() 형식문자 중에는 %[]가 있습니다. 이 경우, %[^\n] 같은 형식 문자를 지정하면 개행문자를 제외하고 모두 받겠다는 의미가 됩니다. 결과적으로 아래 코드처럼 활용하면 gets_s()처럼 작동합니다.

scanf_s("%[^\n]", szBuffer, sizeof(szBuffer));

개인적으로 잘 사용했던 기억은 없었습니다만 알아두어 나쁠 것도 없겠습니다. 😄

 

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.05

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

semu0523님의 질문에 대하여, 아래의 설명을 참조해 주세요.

scanf_s와 gets_s 함수는 문자열을 입력받을 때의 작동 방식에 차이가 있습니다. semu0523님께서 말씀하신 것처럼, scanf_s 함수는 %s 형식으로 문자열을 입력받을 때 공백, 탭, 개행 문자 등을 문자열의 종료로 인식합니다. 이는 말씀하신 예시처럼 “안 녕하세요”를 입력했을 때 “안”까지만 받고 그 뒤의 공백 이후 문자열은 무시하는 것을 의미합니다.

반면, gets_s 함수는 개행문자(‘\n’)를 만날 때까지 입력받으므로, 공백이 포함된 문자열을 모두 입력받을 수 있습니다. 예를 들어 “안 녕하세요”를 입력하면 공백을 포함하여 해당 문자열 전체가 입력됩니다.

질문에 제시하신 내용이 맞으며, 간단하게 요약하자면:

  • scanf_s는 입력 중 공백을 만나면 그 지점까지만 입력받고 중단
  • gets_s는 개행문자(\n)를 만날 때까지 입력을 계속 받음(즉, 공백 포함)

아래의 기존 게시글에서 semu0523님과 유사한 질문을 한 수강생의 예시 및 답변을 찾을 수 있습니다:

scanf_s 연속 사용에 대해 질문 있습니다.

이 게시글에서는 scanf_s를 사용할 때의 입력 버퍼 관련 문제에 대해 설명하고 있습니다. gets_s와 구체적으로 비교하는 내용은 아니지만, scanf_s의 동작 방식에 대한 이해를 돕는 정보를 얻을 수 있습니다.

scanf(“%d\n”, &input)

이 게시글은 scanf를 사용한 경우의 입력 버퍼의 동작 방식에 대해 다루고 있습니다. scanf_s와 직접적인 비교는 아니지만 scanf 계열 함수의 공백 처리 방식에 대한 추가적인 이해를 도울 수 있습니다.

위 링크들이 semu0523님의 질문에 대한 답변을 찾는 데 도움이 되길 바랍니다. 해당 강좌의 지식공유자 또는 다른 학습자들이 제공한 추가적인 답변이나 토론을 확인하시면 더욱 구체적인 설명을 얻을 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

semu0523님의 프로필

semu0523

질문자

2024.02.05

오! 답변 감사합니다.

그럼 scanf_s()와 gets_s()의 차이점은 문자열을 입력받을 때의 작동 방식에 차이점 말고 다른 차이점이 또 있을까요?