본문 바로가기

PROGRAMMING LANGUAGE/C++

strcpy , strcpy_s 차이점

strcpy함수는 string copy의 줄임말이다. 문자열을 복사하는 함수인데 그냥 사용하게 되면 오류가 생긴다.

파일의 상단에 #define _CRT_SECURE_NO_WARNINGS 를 추가해주면 오류가 없어진다.

하지만 strcpy함수에는 strcpy(a, b)일때 b를 a에 복사하게 되는데 b가 a의 사이즈보다 큰 경우 에러가 발생한다.

그 점을 보완하기 위해서 strcpy_s가 지원되었다. strcpy_s는 strcpy_s(저장될 변수, 저장할 사이즈, 복사할 변수)로

지원되고 복사가 될 사이즈를 정해주기 떄문에 문제를 해결할 수 있지만 속도가 strcpy보다 느리다는 단점이 있다. 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include "Person.h"

using namespace std;

Person::Person(const char* name, const char* addr)
{
	// 이름을 저장할 공간 할당
	this->name = new char[strlen(name) + 1];
	// 데이터 멤버 name에 이름을 복사
	strcpy(this->name, name);
	// 주소를 저장할 공간 할당
	this->addr = new char[strlen(addr) + 1];
	// 데이터 멤버 addr에 주소를 복사
	strcpy(this->addr, addr);
	cout << "Person 객체 생성함(" << name << ")" << endl;
}

Person::~Person() // 소멸자
{
	cout << "Person 객체 제거함(" << name << ")" << endl;
	delete[] name;	// 이름 저장공간 반납
	delete[] addr;	// 주소 저장공간 반납
}

void Person::print() const
{
	cout << addr << "에 사는 " << name << "입니다." << endl;
}

void Person::chAddr(const char* newAddr)
{
	delete[] addr;
	// 새로운 주소에 맞는 공간 할당
	addr = new char[strlen(newAddr) + 1];
	strcpy(addr, newAddr); // 데이터멤버 addr에 새로운 주소를 복사
}

'PROGRAMMING LANGUAGE > C++' 카테고리의 다른 글

함수의 Default 매개변수  (0) 2021.11.11
const 함수 이용  (0) 2021.11.11
inline 함수  (0) 2021.11.11
참조를 리턴받을 때 문제점  (0) 2021.11.10
C++ 함수 템플릿 사용하기  (0) 2021.07.06