728x90
이 오류는 Visual Studio에서 C 언어의 scanf 함수가 보안상 안전하지 않다고 판단해서 발생하는 경고입니다. Microsoft는 버퍼 오버플로우 같은 보안 취약점을 줄이기 위해 일부 함수들을 "deprecated (사용 자제)" 처리했어요.
⚠️ 오류 메시지 해석
error C4996: 'scanf': This function or variable may be unsafe.
Consider using scanf_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
- scanf는 입력 길이를 제한하지 않기 때문에 예상치 못한 입력으로 인해 메모리 침범이 발생할 수 있어요.
- Visual Studio는 이런 위험을 줄이기 위해 scanf_s라는 "secure version"을 권장합니다.
✅ 해결 방법 3가지
1. scanf_s로 변경하기 (권장)
#include <stdio.h>
int main() {
int num;
scanf_s("%d", &num); // scanf 대신 scanf_s 사용
printf("입력한 숫자: %d\n", num);
return 0;
}
- scanf_s는 입력 형식에 따라 추가 인자가 필요할 수 있어요.
- 예: 문자열 입력 시에는 버퍼 크기를 명시해야 함.
char str[20]; scanf_s("%s", str, sizeof(str));
2. 경고 무시하기 (비추천)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
- 이 방법은 scanf를 그대로 쓰면서 경고를 무시하는 방식이에요.
- 보안상 위험이 있으므로 학습용이나 임시 코드에서만 사용하세요.
3. Visual Studio 설정에서 경고 끄기
- 프로젝트 속성 → C/C++ → Preprocessor → Preprocessor Definitions에
_CRT_SECURE_NO_WARNINGS 추가
🔍 요약
방법설명추천 여부
scanf_s 사용 | 보안 강화된 함수 | ✅ 강력 추천 |
#define _CRT_SECURE_NO_WARNINGS | 경고 무시 | ⚠️ 학습용만 |
프로젝트 설정에서 끄기 | 경고 무시 | ⚠️ 학습용만 |
728x90
'1학년 대학 수업 > C++ 프로그래밍' 카테고리의 다른 글
C/C++ 과 다른 언어의 예약어 비교 (0) | 2025.09.11 |
---|---|
C/C++ 예약어 순위 (0) | 2025.09.11 |
C++ 3개의 코드 차이 분석 (0) | 2025.09.11 |
식별자, 리터럴, 자료형, 변수, 전처리기, 연산자의 대해 (0) | 2025.09.11 |
[2 주차] 예습 과제 (0) | 2025.09.05 |