CString类的问题(为什么赋值一个3个对象全被赋值了)
CStringMsgPhone,MsgChkCode,MsgData;CStrings="a";strcpy(MsgPhone.GetBuffer(0),s);Messa...
CString MsgPhone,MsgChkCode,MsgData;
CString s ="a";
strcpy(MsgPhone.GetBuffer(0), s);
MessageBox(MsgData);
MessageBox(MsgPhone);
MessageBox(MsgChkCode);
以上的代码 我只对MsgPhone赋值了,可是MsgPhone,MsgChkCode,MsgData值也都变成了a
MsgChkCode ="";
MsgPhone ="";
MsgData ="";
这么算是初始化吗?可是还是出现三个对象全都被复制成A 展开
CString s ="a";
strcpy(MsgPhone.GetBuffer(0), s);
MessageBox(MsgData);
MessageBox(MsgPhone);
MessageBox(MsgChkCode);
以上的代码 我只对MsgPhone赋值了,可是MsgPhone,MsgChkCode,MsgData值也都变成了a
MsgChkCode ="";
MsgPhone ="";
MsgData ="";
这么算是初始化吗?可是还是出现三个对象全都被复制成A 展开
3个回答
展开全部
说过了,直接用=来赋值,CString已经重载了运算符的,本来就不支持你这种,直接用=
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
赋值不要这样赋,MsgPhone.GetBuffer(0)是取得一个c风格的串,我记得不应该写的
直接用:
MsgPhone=s;
这样赋值,还简单
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
赋值不要这样赋,MsgPhone.GetBuffer(0)是取得一个c风格的串,我记得不应该写的
直接用:
MsgPhone=s;
这样赋值,还简单
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你光写了声明,没有写定义。声明只是申请到了内存,但内存里面的数据可能是老的或者指向别处的。
c++对未定义变量或指针是否做初始化是区分很大的。CString这个类我并没深入研究,但看你运行的结果,似乎是采用了写时复制机制。
也就是说在初始化之前他们都共享同一处地址。
请不要依赖这种特性来编程,因为换个编译器就不一样了。C++对未初始化的变量或指针操作的定义是“结果不可预知”。
补充:
算初始化
c++对未定义变量或指针是否做初始化是区分很大的。CString这个类我并没深入研究,但看你运行的结果,似乎是采用了写时复制机制。
也就是说在初始化之前他们都共享同一处地址。
请不要依赖这种特性来编程,因为换个编译器就不一样了。C++对未初始化的变量或指针操作的定义是“结果不可预知”。
补充:
算初始化
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询