언어/C&C++ 응용

[TS] strcpy, strcpy_s

차가운오미자 2021. 6. 14. 18:00

strcpy

- 문자열 복사 기능

- 변수나 문자열 상수에 저장되어 있는 문자열을 다른 변수(메모리)에 복사할 때 주로 사용. 복사할 원문은 반드시 끝에 NULL문자가 포함되어 있어야 한다.

 

함수 원형:
char *strcpy(char *strDestination, const char* strSrc);

- strcpy 함수가 반환하는 char*는 strDestination과 같은 값, 문자열 배열의 시작 값

 

에러:

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

 

strcpy는 복사할 메모리 제한을 안걸기 때문에 버그가 생기기 쉬움.

char * str[4];
strcpy(str, "mynameis");

 

str의 크기는 4바이트인데, strcpy로 복사하려는 문자열은 4바이트가 넘기 때문에 메모리가 오버됨

 

그래서 VS2017 이후에는 strcpy 쓰면 에러가 뜸

해결 방법은 두 가지

1. strcpy_s 를 사용한다

2. #define _CRT_SECURE_NO_WARNINGS 를 선언한다.

 

strcpy_s

errno_t strcpy_s(char *dest, rsize_t dest_size, const char* src);

 

strcpy_s는 dest_size로 복사할 공간의 크기를 매개변수로 줌으로써 이런 버그를 방지할 수 있음

(메모리가 오버되면 디버그 창이 뜬다)

 

반환하는 errno_t가 0이면 strcpy_s가 제대로 작동했다는 뜻이다.

 

 

참고: http://blog.naver.com/PostView.nhn?blogId=tipsware&logNo=221301499253