其他分享
首页 > 其他分享> > CString、Char、std::string

CString、Char、std::string

作者:互联网

前言

最近在使用MFC,经常遇见CString类型,同时又经常会使用到CString和Char*类型以及std::string类型的相互转换,故写下这篇随笔记录一下。

CString

MFC的封装类

其只有一个数据成员m_pszData,其值为字符串首地址,其数据类型为wchar_t*或char*。但是在m_pszData的前面实际还分配了CSringData数据块,包含了IAtlStringMgr* pStringMgr; int nDataLength; int nAllocLength; int nRefs;等管理数据。

CString使用写时复制机制,使用了引用计数。

CString提供了Format方法用于格式化 。

习惯_T()宏的使用以符合Unicode。

CString具有GetBuffer()和ReleaseBuffer()。

GetBuffer方法,返回一个可写的缓冲指针。配合使用ReleaseBuffer方法,字符串的实际长度会被重新计算,然后存入 CString 对象中。

在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

CString转char*的一种方法

先从CString转CStringA

CString cstr(_T("CHINA"));
CStringA cstra;
cstra = cstr;
//注意,不能直接写CStringA cstra = str,否则会发生错误。

然后从CStringA转成char*

char* pstr = cstra.GetBuffer();
cstra.RealseBuffer();

CString转std::tring的一种方法

CString可以直接赋值给CStringA,CStringA可以直接赋值给std::string。

标签:std,cstra,CString,ReleaseBuffer,CStringA,Char,GetBuffer
来源: https://www.cnblogs.com/unrealCat/p/16504174.html