CString类的GetBuffer问题
先看代码:
CString s= "hello";
CString m;
m=s;
LPSTR p1 = (LPSTR)(LPCSTR)s;
LPSTR p2 = (LPSTR)(LPCSTR)m;
LPSTR p3 = s.GetBuffer(0);
LPSTR p4 = (LPSTR)(LPCSTR)s;
int a=s.GetAllocLength();
LPSTR p5 = s.GetBuffer(10);
int b=s.GetAllocLength();
再看结果
+ p1 0x00557b58 "hello" char *
+ p2 0x00557b58 "hello" char *
+ p3 0x00557b88 "hello" char *
+ p4 0x00557b88 "hello" char *
p5 0x00557b88 "hello" char *
a 7 int
b 15 int
p1=p2好理解,因为刚开始时两者指向同一块内存区域。而p3处GetBuffer的参数为0,应该是小于其原本的长度,这时候不是不需要重新分配内存么,但是从p3和p4可以看出内存地址发生了改变,另外p5、a、b的值该怎么解释呢?
CString s= "hello";
CString m;
m=s;
LPSTR p1 = (LPSTR)(LPCSTR)s;
LPSTR p2 = (LPSTR)(LPCSTR)m;
LPSTR p3 = s.GetBuffer(0);
LPSTR p4 = (LPSTR)(LPCSTR)s;
int a=s.GetAllocLength();
LPSTR p5 = s.GetBuffer(10);
int b=s.GetAllocLength();
再看结果
+ p1 0x00557b58 "hello" char *
+ p2 0x00557b58 "hello" char *
+ p3 0x00557b88 "hello" char *
+ p4 0x00557b88 "hello" char *
p5 0x00557b88 "hello" char *
a 7 int
b 15 int
p1=p2好理解,因为刚开始时两者指向同一块内存区域。而p3处GetBuffer的参数为0,应该是小于其原本的长度,这时候不是不需要重新分配内存么,但是从p3和p4可以看出内存地址发生了改变,另外p5、a、b的值该怎么解释呢?
...全文
相关推荐
CString和string对象
CString对象和string对象的相互转化问题,以及他们呢的用法
CString
关于Cstring 类
CString介绍
CStringCStringCStringCStringCStringCStringCStringCStringCStringCStringCStringCStringCString介绍CString介绍CString介绍CString介绍CString介绍CString介绍CString介绍
CString操作指南
CString操作指南。一个比较详细的介绍CString类的文档 ,有助于方便 MFC中操作字符串 。
( C++_MFC_CString
我们应该注意到,没有一个受过伦理教育的软件工程师会同意开发出“摧毁巴格达”的程序。然而基本的职业道德却可以要求他们开发出“摧毁城市”的程序,巴格达只是这个程序的一个参数。


