博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
总结CString、string、char*
阅读量:6003 次
发布时间:2019-06-20

本文共 1629 字,大约阅读时间需要 5 分钟。

hot3.png

(一)首先说说string和char*:

1、概述

在C语言中: string是字符串,而char*是字符指针。二者不是在什么时候都等价,当字符指针指向的地址保存了一个字符串(即以‘\0’结尾的一个字符序列)时,可以说它指向了一个字符串,其它情况下则不等价。

在C++中: string是一个字符容器,它是模板库里的一个扩展模板类,而char是一个基本数据类型(C++的内置类型),二者就更不等价了。其中string有构造函数,char没有构造函数,只可以赋值(char* m="abc"; string str(m);)

2、二者的相互转化:

string转char*: 使用c_str()方法。std::string str="abc"; char* p=str.c_str(); char*转string: 直接使用初始化string s(char *),在不是初始化的地方,最好使用assign();

(二)CString

1、概述

CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。能体现出 CString 类型方便性特点的一个方面就是字符串的连接,使用 CString 类型,你能很方便地连接两个字符串,正如下面的例子:

CString gray("Gray");CString cat("Cat");CString graycat = gray + cat;//then graycat="GrayCat"

要比用下面的方法好得多:

char gray[] = "Gray";char cat[] = "Cat";char * graycat = malloc(strlen(gray) + strlen(cat) + 1);strcpy(graycat,gray);strcat(graycat,cat);

2、CString和其它两者之间的转化

CString->std::string 例子:

CString strMfc=“test“; std::string strStl; strStl=strMfc.GetBuffer(0);

unicode情形下:

CStringW strw = _T("test");CStringA stra(strw.GetBuffer(0));strw.ReleaseBuffer();std::string imgpath=stra.GetBuffer(0);stra.ReleaseBuffer();

std::string->CString 例子:

CString strMfc; std::string strStl=“test“; strMfc=strStl.c_str();

CString->char* 例子:

强制类型转换LPCTSTR

LPCTSTR s;

或者

LPCTSTR(s);

使用Getbuffer():

不给 GetBuffer 传递参数时它使用默认值 0,意思是:“给我这个字符串的指针,我保证不加长它”。当调用 ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象中。 必须强调一点,在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象.因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

LPTSTR p = s.GetBuffer();// do something with pint m = s.GetLength(); // 可能出错!!!s.ReleaseBuffer();int n = s.GetLength(); // 保证正确

转载于:https://my.oschina.net/u/566587/blog/162420

你可能感兴趣的文章
利用JavaScript jQuery实现图片无限循环轮播(不借助于轮播插件)-----转载
查看>>
从零开始搭建vue项目 请求拦截器 响应拦截器
查看>>
HDU3257 Hello World!【打印图案+位运算】
查看>>
jquery 选择器
查看>>
The secret code
查看>>
Makefile 多目录自动编译
查看>>
学习笔记:Oracle dul数据挖掘 导出Oracle11G数据文件坏块中表中
查看>>
统一Matlab下不同子图的色标colorbar
查看>>
Linux 进程间通信(二) 管道
查看>>
深入浅出JQuery (二) 选择器
查看>>
CI框架 -- 驱动器
查看>>
FastMQ V0.2.0 stable版发布
查看>>
对象复制
查看>>
Mongodb内嵌数组的完全匹配查询
查看>>
WARN hdfs.DFSClient: Caught exception java.lang.InterruptedException
查看>>
移动硬盘文件或目录损坏且无法读取怎么解决
查看>>
在shell中使用sed命令替换/为\/
查看>>
JavaSe: 不要小看了 Serializable
查看>>
Node.js 抓取电影天堂新上电影节目单及ftp链接
查看>>
linux popen函数
查看>>