본문 바로가기
C언어

[Visual studio2019] scanf_s와 scanf 문자열 입력 오류

by 케찹이 2020. 4. 24.

비주얼 스튜디오는 거의 2년 마다 새로운 버전으로 출시가 되고 있습니다. 덕분에 각 버전마다 조금씩 다른 특징이 있습니다. 그리고 이번 visual studio2017에선 조금 큰 변화가 있었습니다. 바로 출력함수 scanf입니다. 

 

예전처럼 scanf를 사용하게 되면 경고문이 나오게 됩니다. 특히 우리가 평소대로 문자열을 입력받기 위해서 

 

scanf("%s",sentence);

 

이런식으로 사용하게 된다면 제대로 작동을 안하고 경고문이 뜹니다. 그럼 어떻게 해야 할까요???

 

1. 일단은 당장 경고문을 없애기 위해서 경고문을 없애는 define을 사용하면 경고문이 없어집니다. 

 

#define _CRT_SECURE_NO_WARNINGS

 

 

그리고 아마 비주얼스튜디오에서 얘기를 하겠지만 scanf함수 대신에 scanf_s함수를 사용하라고 직접적으로 언급을 합니다. 하지만 scanf_s함수를 사용해도 컴파일이 안될겁니다. 왜냐하면 scanf_s함수를 이렇게 사용해야하기 때문이죠.

 

scanf_s("%s",sentence,15);

 

이런식으로 마지막에 얼마만큼 길이의 문자열을 받아야하는지 적어주어야 scanf_s함수가 사용가능할 것입니다. 

 

그럼에도 불구하고 visual studio의 변화무쌍한 변화에 프로그램이 작동하지 않을 수도 있습니다. 나중에 제가 더 자세히 알게 된다면 글을 올리도록 하겠습니다. 이건 최신버전인 visual studio 2019에서 생긴 변화이기 때문에 많은 전문가들도 어떻게 다뤄할지 모를겁니다. 참고로 저희 교수님도 과제를 올릴때 제발 scanf_s를 사용하지 말라고 하더군요 ㅎㅎ. 더불어 제가 제 C언어 글에서도 비주얼 스튜디오 사용을 좀 자제하라라고 말한 것입니다. 

 

 

그럼에도 불구하고 scanf를 쓰고 싶어!!! 하시는 분들은 밑의 솔루션을 참고해주세요~

 

1. 사용중인 project를 우측클릭해서 속성에 들어가주세요

 

2. 구성 속성 -> C/C++ -> 전처리기에 들어가면 전처리기 정의가 있을 것입니다. 위에 전처리기 정의에 WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)라고 이미 쓰여져 있을 겁니다. 

 

이 상태에서 ;CR;_CRT_SECURE_NO_WARNINGS;를 추가해주세요. 반드시 앞뒤로 세미콜론 붙여주세요!!!

 

이제 적용을 눌러주시면 scanf를 정상적으로 사용하실 수 있습니다! 어렵지 않죠?

 

자 어쨌든 제 글이 조금은 도움이 되었길 바라며 저는 이만 물러가도록 하겠습니다. 모두들 열심히 공부하세요!

 

 

댓글