CString,string,char*之间的转换(转)
扫描二维码
随时随地手机看文章
这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。
以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。
1 string to CString
CString.format("%s",string.c_str());
2 CString to string
string str(CString.GetBuffer(str.GetLength()));
3 string to char *
char *p=string.c_str();
4 char * to string
string str(char*);
5 CString to char *
strcpy(char,CString,sizeof(char));
6 char * to CString
CString.format("%s",char*);
CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *转换时,要把char定义成为const char*,这样是最安全的。
以上函数UNICODE编码也没问题:unicode下照用,加个_T()宏就行了,像这样子_T("%s")
补充:
CString 可能是 CStringW/CStringA,在与 string 转换时,如果是 CStringW,还涉及编码转换问题。下面以 CStringA 来说明。
1 string to CString
CString.format("%s",string.c_str());
CStringA = string.c_str() 就可以了
2 CString to string
string str(CString.GetBuffer(str.GetLength()));
GetBuffer 有参数的话,可能导致内部的分配空间动作,要进行后续 ReleaseBuffer 操作。
string = CStringA
string = CStringA.GetBuffer();
3 string to char *
char *p=string.c_str();
4 char * to string
string str(char*);
5 CString to char *
strcpy(char *,CString,sizeof(char));
按照 3 风格,这里应该 char * = CStringA; 或者 char *p = CStringA.GetBuffer();
6 char * to CString
CStringA = char * 就可以了
分类: C/C++,算法
/ 数据结构
好文要顶 关注我 收藏该文 petercao
关注 - 148
粉丝 - 406
+加关注
2
0
« 上一篇:C语言itoa()函数和atoi()函数详解(整数转字符C实现)
» 下一篇:简明Vim练级攻略(转)
posted @ 2013-07-03 04:03 petercao 阅读(41192)
评论(0) 编辑 收藏
刷新评论刷新页面返回顶部
注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。最新IT新闻:
· 小米电视4正式宣布:LED/4K/无边框/超薄
· “Apple支持”应用更新:可预约“天才吧”售后维修
· 锤子联合YunOS:下半年发力
· 三星官方开箱Galaxy S8/S8+ 送AKG专业调音耳机
· Chrome 59 Beta发布 主要有三大新特性
» 更多新闻...最新知识库文章:
· 唱吧DevOps的落地,微服务CI/CD的范本技术解读
· 程序员,如何从平庸走向理想?
· 我为什么鼓励工程师写blog
· 怎么轻松学习JavaScript
· 如何打好前端游击战
» 更多知识库文章...
公告
昵称:petercao
园龄:7年6个月
粉丝:406
关注:148
+加关注
<
2017年5月
>30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
搜索 常用链接
我的随笔我的评论我的参与最新评论我的标签
随笔分类
AI(1)Android(276)AR&VR(1)C# & .NET(60)C/C++(41)Editor/IDE(9)HTML5/WEB(19)iOS(5)Java / J2EE(114)Linux(53)Misc(39)OS/操作系统(6)Python(5)版本控制(16)编译原理/编程语言(7)嵌入式(7)软件工程 / UML建模(12)软件项目管理(1)设计模式(3)数据库(12)算法 / 数据结构(10)网络&软件架构(2)网络协议(10)云计算(4)职业生涯规划(9)
随笔档案
2017年5月 (7)2017年4月 (22)2017年3月 (15)2017年2月 (11)2017年1月 (15)2016年12月 (12)2016年11月 (3)2016年10月 (13)2016年9月 (27)2016年8月 (20)2016年7月 (13)2016年5月 (1)2016年4月 (9)2016年3月 (1)2015年11月 (1)2015年10月 (10)2015年9月 (1)2015年8月 (5)2015年6月 (1)2015年5月 (1)2015年4月 (2)2015年3月 (2)2015年2月 (1)2015年1月 (2)2014年12月 (1)2014年10月 (3)2014年9月 (1)2014年7月 (3)2014年6月 (2)2014年5月 (30)2014年4月 (47)2014年3月 (10)2014年2月 (1)2014年1月 (11)2013年12月 (3)2013年11月 (5)2013年10月 (4)2013年9月 (33)2013年8月 (16)2013年7月 (17)2013年6月 (6)2013年5月 (21)2013年4月 (12)2013年3月 (15)2013年1月 (1)2012年12月 (3)2012年11月 (2)2012年10月 (13)2012年9月 (20)2012年8月 (14)2012年7月 (8)2012年6月 (2)2012年5月 (14)2012年4月 (10)2012年3月 (8)2012年1月 (2)2011年12月 (7)2011年11月 (5)2011年10月 (4)2011年9月 (4)2011年8月 (15)2011年7月 (11)2011年6月 (9)
文章分类
C/C++(1)
相册
MyPhoto
最新评论
1. Re:程序员的生存发展和出路感觉越干越看不到未来,做技术的出路还是不知道在哪里--Andye2. Re:程序员的生存发展和出路写的很对,要成为一个帮人解问题,被人依赖的人--Andye3. Re:怎么修改chrome浏览器的字体Chrome字体设置:「Arial、Georgia、Arial、Consolas」或「Verdana、Georgia、Verdana、Consolas」「微软雅黑、华文宋体、微软雅黑、Consolas......--petercao4. Re:使用EasyBCD完美实现Windows7与Linux双系统在fedora25下,kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/deepin.iso ro quiet splash locale=z......--lunarcraft5. Re:Android Studio 换主题 + 背景图片 + 去掉白色竖线plugins:android code generatorandroid material design icon generatorandroid ndk supportandroid suppo......--petercao
阅读排行榜
1. java中重载与重写的区别(222258)2. px 与 dp, sp换算公式?(138534)3. IntelliJ IDEA 快捷键和设置(133316)4. 导入Eclipse工程 到 Android Studio(90684)5. C语言itoa()函数和atoi()函数详解(整数转字符C实现)(87148)
评论排行榜
1. java中重载与重写的区别(17)2. java中equals方法的用法以及==的用法(转)(7)3. 大数据量分页查询方法(转)(7)4. Ubuntu 下载 & 编译 Android5.1 源码(7)5. C# 编写Windows Service(windows服务程序)(6)
推荐排行榜
1. java中重载与重写的区别(27)2. IntelliJ IDEA 快捷键和设置(14)3. java中equals方法的用法以及==的用法(转)(12)4. Java中abstract class 和 interface 的解释和他们的异同点(转)(9)5. C# 编写Windows Service(windows服务程序)(8)
Copyright ©2017 petercao
Bluestorm's
Space
博客园首页新随笔联系订阅管理
随笔 - 588 文章 - 3 评论
- 137
CString,string,char*之间的转换(转)
这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。
以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。
1 string to CString
CString.format("%s",string.c_str());
2 CString to string
string str(CString.GetBuffer(str.GetLength()));
3 string to char *
char *p=string.c_str();
4 char * to string
string str(char*);
5 CString to char *
strcpy(char,CString,sizeof(char));
6 char * to CString
CString.format("%s",char*);
CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *转换时,要把char定义成为const char*,这样是最安全的。
以上函数UNICODE编码也没问题:unicode下照用,加个_T()宏就行了,像这样子_T("%s")
补充:
CString 可能是 CStringW/CStringA,在与 string 转换时,如果是 CStringW,还涉及编码转换问题。下面以 CStringA 来说明。
1 string to CString
CString.format("%s",string.c_str());
CStringA = string.c_str() 就可以了
2 CString to string
string str(CString.GetBuffer(str.GetLength()));
GetBuffer 有参数的话,可能导致内部的分配空间动作,要进行后续 ReleaseBuffer 操作。
string = CStringA
string = CStringA.GetBuffer();
3 string to char *
char *p=string.c_str();
4 char * to string
string str(char*);
5 CString to char *
strcpy(char *,CString,sizeof(char));
按照 3 风格,这里应该 char * = CStringA; 或者 char *p = CStringA.GetBuffer();
6 char * to CString
CStringA = char * 就可以了