[열혈 C++ 프로그래밍] 문자열을 char * 타입으로 받는 경우 생기는 오류

Yerin·2023년 4월 21일
0

열혈 c++ 프로그래밍 책에서 예제를 실행하는 도중
아래 코드에서 다음과 같은 오류가 발생했습니다.

#include <iostream>
#include <cstring>
using namespace std;

class Person
{
private:
	char * name;
	int age;
public:
	Person(char * myname, int myage)
	{
		int len = strlen(myname) + 1;
		name = new char[len];
		strcpy(name, myname);
		age = myage;
	}
	void ShowPersonInfo() const
	{
		cout << "이름: " << name << endl;
		cout << "나이: " << age << endl;
	}
	~Person()
	{
		delete []name;
		cout << "called destructor!" << endl;
	
	}

};

int main(void)
{
	Person man1("Lee dong woo", 29);
	Person man2 = man1;
	man1.ShowPersonInfo();
	man2.ShowPersonInfo();
	return 0;
}

무슨 이유에서 일까? 하여 검색을 해보니 아래와 같은 까닭을 얻었습니다.

C에서는 문자열 리터럴이 char의 배열이지만, C++에서는 const char의 배열이다

C++에서는 문자열을 문자 상수의 배열로 받는 다는 점!

이제 까닭을 알았으니 문제 부분에서 const를 붙여 오류를 해결해줍니다!

#include <iostream>
#include <cstring>
using namespace std;

class Person
{
private:
	char * name;
	int age;
public:
	Person(const char * myname, int myage)
	{
		int len = strlen(myname) + 1;
		name = new char[len];
		strcpy(name, myname);
		age = myage;
	}
	void ShowPersonInfo() const
	{
		cout << "이름: " << name << endl;
		cout << "나이: " << age << endl;
	}
	~Person()
	{
		delete []name;
		cout << "called destructor!" << endl;
	
	}

};

int main(void)
{
	Person man1("Lee dong woo", 29);
	Person man2 = man1;
	man1.ShowPersonInfo();
	man2.ShowPersonInfo();
	return 0;
}
profile
재밌는 코딩 공부

0개의 댓글