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