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 |