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 를 정의 해준다.


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)); 등..