인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

손진주님의 프로필 이미지

작성한 질문수

C 프로그래밍 - 입문부터 게임 개발까지

scanf

scanf

작성

·

37

0

{75DE7EA2-3D0A-4E93-8CB2-1E512C130035}.png

두번째 부분이 계속 저렇게 표시되어 있고
출력해서 문자열을 입력하시오라고 적으면
문자열 까지만 출력글이 나옵니다

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 손진주님.

C 프로그래밍에서 scanf 사용 시 주의사항이 몇 가지 있는데요, 질문에서 지적하신 몇 가지 포인트에 대해 설명드리겠습니다.

  1. scanf_s 사용 여부: 일반적으로 scanf는 문자열을 입력받을 때 사용할 수 있지만, 글에서 설명하신 scanf_s는 보다 안전한 입력을 위해 사용되는 함수입니다. 사용 시, 입력받을 버퍼 크기를 명시해줘야 합니다. 하지만 이 기능은 MSVC 컴파일러에서만 지원되므로, 컴파일러에 따라 적합성을 확인해야 합니다.

  2. sizeof의 사용: scanf_s를 사용하는 경우, 마지막 인자로 입력 버퍼의 크기를 지정해야 합니다. 예를 들어, scanf_s("%s", str, sizeof(str)); 같이 버퍼 크기를 올바르게 지정해야 합니다. 하지만 기본 scanf에서는 이 인자 없이 사용해야 합니다.

  3. 버퍼 오버플로 방지: 문자열 입력 시 scanf는 공백이나 버퍼 크기 초과 등으로 인한 버퍼 오버플로우 취약성이 있으므로, 이러한 문제를 피하기 위해 fgets와 같은 함수를 사용하는 것이 좋습니다.

관련 문제에 대한 해결 방법을 더 잘 이해하시기 위해, scanf_s에서의 sizeof를 참고하시면 도움이 될 것 같습니다.

질문에서 제공된 이미지의 코드가 scanf_s를 사용하는 방식이라면, 위 설명대로 사용해야 올바르게 작동할 것입니다. 또한, 컴파일러에 따라서는 scanf_s의 사용이 제한될 수 있어 조심해야 합니다.

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