scanf() 함수를 사용하면 C4996 오류가 발생하곤 합니다.


원인

 원래는 문제없이 컴파되는 것이 맞지만, scanf() 등의 함수에서 발생 가능한 잠재적 문제점으로 인해 MSVC에 이 함수들을 사용하지 못하도록 강제하는 설정(SDL, Security Development Lifecycle)이 활성화되어 사용하지 못하는 것입니다.


처리방법

1. 프로젝트 설정 변경

 1) Visual Studio 2019 상단 메뉴의 프로젝트 - 속성(P)을 눌러 속성 창을 엽니다.

 2) 왼쪽의 C/C++ - 일반 메뉴에서 SDL 검사 항목을 아니요(/sdl-)로 바꿔줍니다.

 

 

 2) 전처리 코드 작성

#pragma warning(disable:4996)
#define _CRT_SECURE_NO_WARNINGS

 둘중 하나만 작성해서 사용하면 됩니다.

'C' 카테고리의 다른 글

VS ERROR C6031 : 반환 값이 무시되었습니다. 'function'.  (0) 2020.12.17

 

#include <stdio.h>
void main(){
	int int_data;
	float float_data;

	scanf("%d", &int_data);
	scanf("%f", &float_data);

	printf("input : %d, %f\n", int_data, float_data);
}

위와 같이 사용할 때 C6031 오류가 납니다.


원인

 함수 scanf의 반환값을 어딘가에 대입하거나 사용하지 않아서 발생하는 경고입니다. 코드상 문제도 없으며, 단순히 버려지는 값이 있음을 알리기 위해 인텔리센스가 안내하는 내용입니다. 만일 원하는 작업대로 정상 동작 한다면 무시하셔도 됩니다.


처리 방법

 

1. 프로젝트 속성 수정

 1) Visual Studio 2019 상단 [프로젝트 - 속성] 을 눌러 속성 창을 엽니다.

 

 2) 왼쪽 탭에서 [ C/C++ - 고급] 메뉴를 엽니다. 이 때, [C/C++]메뉴는 *.c 혹은 *.cpp 파일이 하나 이상 프로젝트에 포함되어있어야합니다.

 

 3)  [특정 경고 사용 안 함] 메뉴에 가리고자 하는 경고 번호를 입력하세요. 여기선 6031을 입력해주시면 됩니다. 

 

2. 반환 값을 변수에 담기

#include <stdio.h>
void main(){
	int int_data;
	float float_data;

	int tmp = scanf("%d", &int_data);
	int tmp1 = scanf("%f", &float_data);

	printf("input : %d, %f\n", int_data, float_data);
}

 

'C' 카테고리의 다른 글

VS ERROR C4996 : This function or variable may be unsafe  (0) 2020.12.17

+ Recent posts