ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C언어 Visual Studio scanf 에러 해결 방법
    c언어 기초 2017. 3. 19. 11:12




    비주얼 스튜디오 2013(VS 2013) 버전 이상부터 scanf 을 사용하면 아래와 같은 에러가 나면서 컴파일이 안됩니다



    에러 메시지를 보면 error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 라고 나옵니다


    scanf 함수가 취약하니 scanf_s를 사용하거나 _CRT_SECURE_NO_WARNINGS 를 사용하라고 합니다


    scanf를 사용할 수 있도록 _CRT_SECURE_NO_WARNINGS를 사용해 봅시다


    솔루션 탐색기에서 자신의 프로젝트 명을 마우스 오른쪽 클릭 -> 속성에 들어갑니다




    원래 있던 글 뒤에 ;(구분자) 뒤에 _CRT_SECURE_NO_WARNINGS를 넣어주고 ; 까지 넣어줍니다



    그리고 다시 빌드(컴파일) 시켜보면 에러가 없어집니다


    너무...어렵다.....

    다른 방법은.... 같은 속성창에서  SDL 검사를 아니요~ 로 변경하면 끝!!!! 





    또 전처리기에 등록하는 방법말고 아래와 같이 소스코드에 ifdef를 이용하여 define으로 _CRT_SECURE_NO_WARNINGS을 선언해 주면 됩니다



    _CRT_SECURE_NO_WARNINGS 대신 #pragma warning(disable: 4996) 을 사용하여도 됩니다

    (4996은 아까 에러의 메시지에 써있음)

    pragma는 한 번만 실행하게 되기 위해 사용합니다 ifdef와 비슷한 기능을 합니다



    또 이런식으로 추가해주는 방법 말고 가장 간단한 방법은


    솔루션 프로젝트를 만들때 SDL(Security Development Lifecycle) 검사 부분을 체크해제하는 것입니다



    하지만, 가장 좋은 방법은 취약한 함수인 scanf 대신에scanf_s를 사용해보는 것입니다


    scanf는 버퍼오버플로우 취약점이 존재하기 때문에 이렇게 반 강제적으로 scanf의 사용을 막은거 같습니다



    int num=0;

    scanf_s("%d", &num, sizeof(4));

    이런식으로 사이즈 지정해주는 scanf_s




    'c언어 기초 ' 카테고리의 다른 글

    scanf 함수  (0) 2017.03.20
    연산자  (0) 2017.03.20
    데이터 저장을 위한 변수  (0) 2017.03.17
    printf 함수의 기본  (1) 2017.03.16
    C언어의 개론적 이야기  (0) 2017.03.16

    댓글

Designed by Tistory.