1학년 대학 수업/C++ 프로그래밍

scanf 함수 오류

hawon6691 2025. 9. 11. 15:05
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