ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CString、Char、std::string

2022-07-22 01:04:27  阅读:120  来源: 互联网

标签:std cstra CString ReleaseBuffer CStringA Char GetBuffer


前言

最近在使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有