개발 공부/C언어

[C언어] Visual Studio(비주얼 스튜디오) 2017에서 scanf 문 말고 scanf_s을 사용해보자

가이윤 2019. 5. 1. 12:32

Visual Studio에서는 scanf 함수의 호출이 안정적이지 않다고 판단하고 독자적으로 함수 scanf_s를 제공하고 있습니다. scanf 함수를 사용해도 지장은 없습니다. 

클릭해서 크게 보세요

scanf를 사용해도 빌드는 성공하였고 결과도 성공적으로 나옵니다.

 

클릭해서 크게 보세요

그런데 여기서 경고문이 나타납니다. 문장을 보면 안정적이지 않다라고 말하고 있네요. Visual Studio 2010을 자주 써온 저는 처음 Visual Studio 2017버전 사용했을때 scanf_s가 완전 다른 기능을 하는 함수인 줄 알았습니다. ㅋㅋ

 

클릭해서 크게 보세요

문장에서 보면 경고문이 나타나지 않게 하려면 _CRT_SECURE_NO_WARNINGS 을 사용해라고 하네요.

이게 예전에는 위 사진처럼 오류가 떴었는데, 현재는 업데이트가 됐는지 아무 지장없게 바뀌었나보네요.(편해졌네)

현재는 #define _CRT_SECURE_NO_WARNINGS 같은 문장을 사용하지 않고 컴파일해도 

아무 문제없이 실행이 되는 것을 알 수 있어요. 2017버전 보다 아래 버전은 잘 모르겠습니다. 2010 버전은 확실히 아무 지장이 없는걸로 알고 있습니다. (이 참에 2017버전으로 갈아탑시당 ㅎㅎ)

Visual Studio 2019 버전도 있지만 너무 최신 버전은 다른 프로그래밍 언어 관련 툴과 호환 하는데 있어서 에러가 있는 경우가 있어서 저는 일부러 2017버전으로 다운로드 받았습니다 ㅎㅎ 

그래서 그래픽 카드 관련한 업데이트도 너무 최신 버전은 사람들이 다운로드 받지 않고 기다렸다가 하는 편이죠 ㅋㅋ

게임이나 이런거 할 때 호환이 안돼서 알 수 없는 에러가 발생하는 경우가 있다고 하네요.

 

이제 scanf_s 를 사용해보겠습니다.

 

보시면 경고문과 여러 문장이 있는데, 쉽게 말하면 버퍼의 크기를 지정해달라는 겁니다. 버퍼는 쉽게 설명하면 잠시 담아놓는 공간을 말합니다. char 형의 경우 한 문자만 담으니 sizeof 연산자를 이용하면 1바이트 크기의 버퍼가 필요하게 됩니다. 물론 무시하고 그냥하셔도 보시다시피 빌드는 성공되어서 실행은 됩니다. 그래도 문장에서 요구하는대로 해보겠습니다.

 

이제 경고문이 나오지 않고 깔끔하게 빌드가 성공했다는 것을 볼 수 있습니다. 굳이 버퍼의 크기를 지정해주지 않더라도 현재의 Visual Studio 2017 버전은 아무 문제 없이 잘 실행되네요. (역시 최신 버전이 좋은건가..ㅋㅋ)

저 같은 경우 저렇게 별 경고문 없이 깔끔하게 빌드 성공한걸 보면 괜히 좋아요 ㅎㅎ

먼가 이런거 깔끔하면 편안한 느낌이 들긴 합니다 ㅋㅋ

 

확실히 Visual Studio 2010버전을 주로 사용해오다가 Visual Studio 2017 버전을 사용하니 편한 점이 많은거 같습니다!

진작 바꿀걸 그랬네여 ㅋㅋ