class A{
char * Name;
void change(char * name){
Name=name;
}
}
int main (void)
{
A q;
char *b ="asd";
q->change(b);
이렇게 하면 오류뜨고 안되는데 안되는 이유가 뭐임? strcpy쓰던데 이유가뭐야?
class A{
char * Name;
void change(char * name){
Name=name;
}
}
int main (void)
{
A q;
char *b ="asd";
q->change(b);
이렇게 하면 오류뜨고 안되는데 안되는 이유가 뭐임? strcpy쓰던데 이유가뭐야?
질문
https://gall.dcinside.com/board/lists?id=github
여기서 ㄱㄱ
포인터 모르냐 게이야... b는 데이터 상의 "asd"배열의 첫 글자를 가리키는 포인터 변수고, 니가 한건 새로운 문자열을 만든게 아니라 기존에 있는 asd배열을 가리키는 포인터 만 복사해서 Name이 "asd"를 가리키게 한거다. - dc App
저경우랑 체인지함수에서 Name= new char[strlen(name)+1] 해서 strcpy 써서 복사시키는거랑 뭐가다름?
님이 말한대로 하면 힙영역에 새로 배열을 만든 담에 거따가 데이터를 복사함. 따라서 두 포인터는 서로 다른 곳을 가리킴. 큰 차이는 첫째로 타자로 친 "asd"는 리터럴이여서 데이터 수정이 불가능하지만, 그걸 복사한 Name이 가리키는 문자열을 얼마든지 수정가능함. - dc App