아래 코드는 10자 이내의 이름을 입력받아 출력하는 코드입니다.
#include <stdio.h>
int main()
{
char name[10];
scanf("%s", &name);
printf("name=%s", name);
return 0;
}
Visual Studio Community에서 C언어를 작성할 때 위와 같이 scanf를 사용할 경우 에러가 발생합니다. 아래는 발생한 에러 코드입니다.
C4996 '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. HonGong C:\path\name.c 5
이 에러를 해결하기 위해서는 크게 3가지 방법이 있습니다. 아래에서 방법을 살펴봐요.
1. #define으로 처리
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char name[10];
scanf("%s", &name);
printf("name=%s", name);
return 0;
}
상단에 다음과 같은 문자열을 넣으면 이를 해결할 수 있습니다. 그리고 새 프로젝트 구성 후 새 파일을 만들고 마우스 우클릭을 한 다음 [속성]을 선택합니다. 그 후에 [속성 페이지] 창에서 [구성 속성]->[C/C++]->[전처리기]->[전처리기 정의]를 클릭 후 우측 아래 방향 화살표를 눌러 <편집...>을 누릅니다. 여기에 아래 문자를 넣어준 뒤 적용하면 끝납니다.
_CRT_SECURE_NO_WARNINGS
이제 상단 [프로젝트] -> [템플릿 내보내기]를 하면 에러를 신경쓰지 않고 사용할 수 있습니다. 이제 [빈 프로젝트]로 열지 말고, 여기서 생성한 템플릿으로 프로젝트를 만들면 #define으로 에러를 처리한 것과 같은 효과를 볼 수 있어요.
2. #pragma로 처리
Visual Studio Community에서 발생한 에러 메시지를 보면 코드가 C4996인 것을 알 수 있습니다. 따라서 이 에러 메시지를 다음과 같이 우회할 수 있습니다.
#pragma warning(disable: 4996)
#include <stdio.h>
int main()
{
char name[10];
scanf("%s", &name);
printf("name=%s", name);
return 0;
}
3. scanf_s 함수 이용
마지막으로 안전한 함수인 scanf_s를 이용한 방법입니다. scanf_s의 사용법은 3번째 인자 값에 전체 입력 배열의 크기를 넣어주면 됩니다. sizeof 함수를 이용하면 간단하게 사용 가능해요.
#include <stdio.h>
int main()
{
char name[10];
scanf_s("%s", &name, sizeof(name));
printf("name=%s", name);
return 0;
}
이제 scanf 함수를 자유롭게 사용해봐요!