C++中关于strcpy函数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 02:56:21
Student S1("wuguocai");
Student S2(S1);
char *N=("WUGUOCAI");
// *S1.Name=*N;
// strcpy(S1.Name,N);
// S1.Name=N;
cout<<S1.Name<<endl;
cout<<S2.Name<<endl;

其中: 1、 *S1.Name=*N; 2、strcpy(S1.Name,N); 3、S1.Name=N;有什么区别?
用第一个时:S1.Name=S2.Name=W;
用第二个时:S1.Name=S2.Name=WUGUOCAI;
用第三个时:S1.Name=WUGUOCAI,S2.Name=wuguocai
这是为什么啊?前辈请指点啊!
谢谢!

字符串都是以0结尾的字符数组,所以1中只拷贝第一个字符。因为,S2和S1指向同一个字符串,所以S1和S2的内容都变了
2拷贝整个字符串从N到S1, 因为,S2和S1指向同一个字符串,所以S1和S2的内容都变了
3,指针的复制,S1不在像原来那样指向S2而是指向N了,所以 S2的内容没有变

楼主拷贝构造函数写的有问题,不应该让拷贝构造产生的对象和已有的对象都指向同一个字符串,拷贝构造函数不是简单的用指针赋值,不要让两个对象指向同一块内存。应该为调用拷贝构造函数产生的新对象也要分配内存空间。这样就不会出现上面得问题了