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
展开
 我来答
panelwork
2010-01-18 · TA获得超过615个赞
知道小有建树答主
回答量:562
采纳率:0%
帮助的人:570万
展开全部

这个问题是由于你用的是CString没有实例化或者是说没有动态分配内存

声明的三个变量的m_pch指针没有指向任何数据

默认有函数自动分配的默认地址,就像你声明你几个int型的都没有初始化,他们的默认地址都是一样的

你用的是strcpy调用getBuffer来给CString的指针赋值,三个指针指向同一个字符串常量

百度网友c4249ef
2010-01-18 · TA获得超过4867个赞
知道大有可为答主
回答量:1855
采纳率:0%
帮助的人:3222万
展开全部
说过了,直接用=来赋值,CString已经重载了运算符的,本来就不支持你这种,直接用=
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
赋值不要这样赋,MsgPhone.GetBuffer(0)是取得一个c风格的串,我记得不应该写的

直接用:
MsgPhone=s;
这样赋值,还简单
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rail_fish
2010-01-18 · TA获得超过369个赞
知道小有建树答主
回答量:132
采纳率:0%
帮助的人:0
展开全部
你光写了声明,没有写定义。声明只是申请到了内存,但内存里面的数据可能是老的或者指向别处的。
c++对未定义变量或指针是否做初始化是区分很大的。CString这个类我并没深入研究,但看你运行的结果,似乎是采用了写时复制机制。
也就是说在初始化之前他们都共享同一处地址。
请不要依赖这种特性来编程,因为换个编译器就不一样了。C++对未初始化的变量或指针操作的定义是“结果不可预知”。

补充:
算初始化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式