strcpy() 함수는 2개의 parameter를 사용하여 2번째 인자인 strSource 포인터가 가리키는 메모리에 저장된 문자열을 1번째 인자인 strDestination이 가리키는 메모리에 복사함
strcpy() 함수는 char * 형식의 주소를 반환하는데 이 주소는 1번째 인자인 strDestination에 전달한 주소와 동일
예시
char str[8];
strcpy(str, "tips"); // str에 "tips" 문자열 복사
char str[8], *p;
p = strcpy(str, "tips"); // 포인터 변수 p에 저장된 주소는 str 배열의 시작 주소와 동일
strcpy 함수가 반환한 주소를 포인터 변수 p가 저장하게 됨. 따라서 포인터 변수 p에 저장된 주소는 str 배열의 시작 주소와 동일
3. strcpy() 함수의 문제점
복사될 메모리의 크기보다 원본 문자열의 크기가 더 크면 버그 발생 가능
예를 들어, 아래와 같이 코드 구성 시 컴파일 할 때는 오류가 나지 않지만 프로그램 실행 시 오류가 나거나 프로그램이 오동작할 수 있음
이유: char str[4]로 설정 시 str 배열의 크기는 총 4 byte까지 문자열 저장 가능하나 'tipsware' 문자열은 NULL 문자까지 포함하면 총 9 byte가 됨. 그런데 이 9 byte 크기의 문자열을 4 byte 크기의 메모리에 저장하려고 하면 메모리 침범이 발생하기에 프로그램이 실행 중 비정상적으로 종료되거나 잘못된 조건으로 동작하게 됨
char str[4];
strcpy(str, "tipsware"); // 버그 발생
이러한 문제점 해결하기 위해 strcpy_s() 함수가 제공됨
02 strcpy_s() 함수란
1. 정의
strcpy()와 똑같은 기능 제공, strcpy()의 단점을 보안하기 위해 만들어진 함수