cstring 对象赋值问题
CString是一个类为什么初始化的时候是CStringaa="test";是这种型式呢,,而不是CStringaa("test");或者CString*aa=newCS...
CString是一个类 为什么初始化的时候是
CString aa="test";
是这种型式呢,,而不是 CString aa("test") ;或者 CString *aa= new CString("test");
CString aa="test"; 是怎么来的??? 展开
CString aa="test";
是这种型式呢,,而不是 CString aa("test") ;或者 CString *aa= new CString("test");
CString aa="test"; 是怎么来的??? 展开
4个回答
展开全部
这个问题是由于你用的是CString没有实例化或者是说没有动态分配内存
声明的三个变量的m_pch指针没有指向任何数据
默认有函数自动分配的默认地址,就像你声明你几个int型的都没有初始化,他们的默认地址都是一样的
你用的是strcpy调用getBuffer来给CString的指针赋值,三个指针指向同一个字符串常量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是用的赋值符重载,实际上是隐式的函数调用;
对这个说法更正一下:
实际上VC++6.0将
CString aa="test";
CString aa("test") ;
编译成一样的代码;
而vc++2008已经没有CString aa="test";这种用法;
只能用CString aa=_T("test");
对这个说法更正一下:
实际上VC++6.0将
CString aa="test";
CString aa("test") ;
编译成一样的代码;
而vc++2008已经没有CString aa="test";这种用法;
只能用CString aa=_T("test");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
s1与s2是两个对象,他们的地址怎么会一样呢,虽然它们的值一样,就像
int a1=3;
int a2=3;
你不能说a1,a2的地址一样,只能说它们的值一样。而且CString的各种运算符号都经过重载的,处理的很特别,像你上面这个例子如果你继续在下面加上一行:
s2=s1;
那么他们的引用地址又是一样的了
可是你接着再加上一行
s1 += "hello";
引用地址又不一样了,s1的m_pchData会指向一个新的位置,s2维持s1原来的位置,s1内容为"hellohello",s2内容依旧"hello"。
所以哪怕有时侯两个CString真的存储在同一个位置你也不要象对待普通的字符串那样对待它,而且永远不要尝试通过获得它的数据地址来更改它的数据,那样很可能造成程序出错,所有的操作都要通过调用CString的成员函数来实现。让CString自己管理它的那份内存
int a1=3;
int a2=3;
你不能说a1,a2的地址一样,只能说它们的值一样。而且CString的各种运算符号都经过重载的,处理的很特别,像你上面这个例子如果你继续在下面加上一行:
s2=s1;
那么他们的引用地址又是一样的了
可是你接着再加上一行
s1 += "hello";
引用地址又不一样了,s1的m_pchData会指向一个新的位置,s2维持s1原来的位置,s1内容为"hellohello",s2内容依旧"hello"。
所以哪怕有时侯两个CString真的存储在同一个位置你也不要象对待普通的字符串那样对待它,而且永远不要尝试通过获得它的数据地址来更改它的数据,那样很可能造成程序出错,所有的操作都要通过调用CString的成员函数来实现。让CString自己管理它的那份内存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询