none
이게 왜 scanf 오류가 나죠.. 간단한 건데 못 찾겠어서 여기 올립니다 RRS feed

  • 질문

  • #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>

    int refunc(int n)
    {
    if(n=0)
    return 1;
    else
    return 2*refunc(n-1);

    }

    int main()
    {
    int n, result;
    printf("정수 입력: ");
    scanf("%d", &n);
    result = refunc(n);
    printf("2의 %d승은 %d\n", n, result);
    return 0;
    }

    1>------ 빌드 시작: 프로젝트: Challenge01, 구성: Debug Win32 ------
    1>  q8.c
    1>c:\users\first\documents\visual studio 2010\projects\chap09\challenge01\q8.c(17): warning 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.
    1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(304) : 'scanf' 선언을 참조하십시오.
    1>  Challenge01.vcxproj -> C:\Users\first\Documents\Visual Studio 2010\Projects\Chap09\Debug\Challenge01.exe
    ========== 빌드: 성공 1, 실패 0, 최신 0, 생략 0 ==========

    자꾸 이렇게 오류가 떠요. scanf는 안전하지 않는 함수라고 해서 scanf_s도 써보고 전처리기 명령어 _CRT_SECURE_NO_WARNINGS도 해보고 해도 되질 않네요. 뭐가 문제일까요?


    2018년 6월 30일 토요일 오후 5:07

답변

  • Precompiled header를 사용하는 경우에는 stdafx.h 파일의 #include <stdio.h> 상단에

     #define _CRT_SECURE_NO_WARNINGS 를 넣어주면 되고

    그렇지 않은 경우에는 지금처럼 main 함수 파일의 #include <stdio.h> 상단에 넣어주면 잘 될텐데요..

    그리고 scanf_s 함수로 바꿨는데 잘 안되신다는건 이해가 안되네요.

    scanf_s 함수는 scanf 함수와 비교하여 문자열에 대한 추가 파라미터가 있긴 하지만 %d의 경우에는

    함수 이름만 바꿔서 동일하게 사용할 수 있습니다.

    그리고 지금 올리신 코드에 다른 문제가 있다면 refunc 함수의 if 비교 조건이 n = 0 으로 되어있는데

    n == 0 으로 바꾸셔야 합니다.

    2018년 7월 3일 화요일 오전 12:53