flrto

scanf 사용시 _CRT_SECURE_NO_WARNINGS 미정의 문제 본문

C/Academy

scanf 사용시 _CRT_SECURE_NO_WARNINGS 미정의 문제

갈릭새우칩 2019. 6. 10. 21:07
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main()
{
    int sum = 0;
 
    int x = 0;
    int y = 0;
 
    
    printf("첫번째 수를 입력하시오 : \n");
    scanf("%d"&x);
    
    printf("두번째 수를 입력하시오 : \n");
    scanf("%d"&y);
 
    sum = x + y;
    printf("두 수의 합은 : %d", sum);
 
    return 0;
}

다음과 같은 예제에서 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)\windows kits\10\include\10.0.17763.0\ucrt\stdio.h(1274): note: 'scanf' 선언을 참조하십시오.

 

라고 하는데 scanf의 경우 버퍼 오버플로우의 위험이 있기 떄문에 다음과 같은 오류가 된다.

 

오류를 해결 하려면


1. 프로젝트 속성에서 전처리기 정의에서 _CRT_SECURE_NO_WARNINGS 를 정의 해준다.

1
2

 


 

2. 코드상에 #define으로 _CRT_SECURE_NO_WARNINGS 를 정의해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int main()
{
    int sum = 0;
 
    int x = 0;
    int y = 0;
 
    
    printf("첫번째 수를 입력하시오 : \n");
    scanf("%d"&x);
    
    printf("두번째 수를 입력하시오 : \n");
    scanf("%d"&y);
 
    sum = x + y;
    printf("두 수의 합은 : %d", sum);
 
    return 0;
}

 


3. 버퍼 오버플로우의 위험성이 있는 scanf 대신 scanf_s를 사용한다.

 

scanf_s("%타입", sizeof(x)); 등..

Comments