[C언어](오류) _CRT_SECURE_NO_WARNINGS

반응형

<해결방법> -클릭-

 

< 오류발생 >

'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

 

 

_CRT_SECURE_NO_WARNINGS

 

C언어를 공부하다가 'strcpy' 함수를 사용하려는데 갑자기 오류창이 떴다.

(해당 오류는 'scanf'함수를 사용할 때에도 종종 발생하는 것으로 알고있다.)

 

 

읽어보니 'strcpy' 기능이 안전하지 않을 수 있으니 'strcpy_s'를 사용하라는 말 같았는데

명령어를 변경해봐도 실행이 되지 않았다.

 

 

 

내가 실행하고자 했던 명령은 아래와 같았다.

 

대충 이해를 해보자면 처음 선언한 문자열과 수정하려는 문자열의 길이가 다르다고 하는 것 같았다.

 

#include <stdio.h>
#include <string.h>

int main(void)
{
	char fruit[20] = "strawberry";

	printf("%s\n", fruit);
	strcpy_s(fruit, "banana");
	printf("%s\n", fruit);

	return 0;
}

 

기존에 선언하면서 초기화한 fruit 에는 10개("strawberry")의 char로 이루어져 있는데,

나는 처음에 선언할 때 "20개까지 단어가 가능"하다고 설정을 해놓았다고 생각해서

변경을 하는 것이 문제가 없을 것이라고 생각했다.

 

하지만 수정하려는 문자 "banana"가 기존과 다르게 7개의 char로 이루어졌기에 저런 오류가 뜨는 것으로 보았다.

 

공부중인 책의 내용에서 이러한 오류가 뜰 경우,

#define _CRT_SECURE_NO_WARNINGS

 

이렇게 #define을 첫줄에 작성하거나 앞서 작성한 템플릿을 이용하라는데 우선 #define 먼저 실행해보았지만

 

여전히 오류가 발생했다.


 

이제 위에서 말한 템플릿을 사용하는 것 밖에 답이 없을 것 같아 템플릿으로 실행했더니

문제없이 실행이 되었다.

 

템플릿에서 설정한 내용은 한가지였다.

 

 

< 해결방법 >

(참고로 아래 내용은 visual code2022에서 진행한 내용이다.)

1. 소스파일(.c)을 우클릭해 속성탭에 들어간다.

 

 

 

2. 좌측탭에서 "전처리기"를 선택

 

 

 

3. 전처리기 정의 탭을 확장해 <편집...>에 들어간다.

 

 

 

4. 여기에 "_CRT_SECURE_NO_WARNINGS"를 입력한 후 저장

 

 

 

5. 이제 잘 돌아가는 것을 확인하면 된다.

 

 

나같은 경우, strawberry라고 저장된 변수를 banana로 변경해 출력하는 것이 목적이였고,

제대로 돌아가는 것을 확인했다.

 

 

 

 

반응형