总结CString、string、char*

(一)首先说说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 p
int m = s.GetLength(); // 可能出错!!!
s.ReleaseBuffer();
int n = s.GetLength(); // 保证正确

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值