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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)