很显然,str1工作不正常是在对通过GetBuffer返回的指针进行一个字符串拷贝之后的。 再看MSDN上的关于这个operation的说明,可以看到里面有这么一段话: If you use the pointer returned by GetBuffer to change the string contents, you must call ReleaseBuffer before using any other CString member functions. 原来...
If you use the pointer returned byGetBufferto change the string contents, you must callReleaseBufferbefore using any otherCStringmember functions. 二.函数作用及使用范围 对一个CString变量,你可以使用的唯一合法转换符是LPCTSTR,直接转换成非常量指针(LPTSTR-[const] char*)是错误的。正确的得到一个指向缓冲区...
ReleaseBuffer 释放对GetBuffer所返回的缓冲区的控制权 FreeExtra 通过释放原先为此字符串分配的额外内存来删除此字符串对象的额外开销 LockBuffer 使引用计数无效并保护缓冲区内的数据 UnlockBuffer 使引用计数有效并释放缓冲区中的数据 Windows专用 AllocSysString 由CString数据分配一个BSTR SetSysString 使用CString对象中的...
If you use the pointer returned by GetBuffer to change the string contents, you must call ReleaseBuffer before using any other CString member functions. 原来在对GetBuffer返回的指针使用之后需要调用ReleaseBuffer,这样才能使用其他CString的operations。上面的代码中,我们在4-5处增建一行代码:str2.ReleaseBuffer(...
string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中.wstring是操作宽字符串的类.C++标准程序库对于string的设计思维就是让他的行为尽可能像基本类型,不会在操作上引起什么麻烦。 CString是对string(字符串)和wstring(宽字符串)的一个封装,常用在mfc中.用来解决编码问题的....
通过设置断点,我们来运行并跟踪这段代码可以看出,当运行到三处时,str1的值是”This is the string 1”,并且nOldLen的值是20。当运行到5处时,发现,str1的值变成了”modified”。也就是说,对GetBuffer返回的字符串指针,我们将它做为参数传递给strcpy,试图来修改这个字符串指针指向的地址,结果是修改成功,并且CStr...
string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中.wstring是操作宽字符串的类.C++标准程序库对于string的设计思维就是让他的行为尽可能像基本类型,不会在操作上引起什么麻烦。 CString是对string(字符串)和wstring(宽字符串)的一个封装,常用在mfc中.用来解决编码问题的....
Cstring和string的区别和联系 相同点:(1)用他们都可以取代对char*的使用。(2)都封装了有丰富的字符串操作接口。(3)他们都是C++的类库。-- 以string的使用为例,不能有如下用法: string * pstr = NULL; //定义一个指向字符串的指针 ...
这个Name 字符串的长度小于 20,所以我不认为是 GetBuffer 的参数的问题。 真让人困惑,请帮帮我。 亲爱的 Frustrated, 你犯了一个相当微妙的错误,聪明反被聪明误,正确的代码应该象下面这样: CString Name = GetName(); RegSetValueEx(hKey, _T("Name"), 0, REG_SZ, ...
_tcscpy(lpsz, theString); 需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 constwchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。 方法三,使用CString::GetBuffer。例如: CString s(_T("This is a test ")); ...