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
'언어 > C&C++ 응용' 카테고리의 다른 글
[TS] Invalid address specified to RTlValidateHeap & DLL개념 (0) | 2021.06.14 |
---|---|
[C] 이중포인터 (0) | 2021.06.14 |
[C] include, include guard(#idndef) (0) | 2021.06.14 |
[C] 메모리 동적 할당 (0) | 2021.06.14 |
[C] 구조체(struct), 공용체(union), 열거형(enum) (0) | 2021.06.14 |