Cstring和string的区别和联系

Cstring和string的区别和联系
  1. string 转 CString
CString.format("%s", string.c_str());
//用c_str()确实比data()要好
  1. char 转 CString
Cstring.format("%s", char*);
  1. char 转 string
string s(char*);
//只能初始化,在不是初始化的地方最好还是用assign().
  1. string 转 char*
char *p = string.c_str();
  1. CString 转 string
string g(CString.GetBuffer());
//GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间

相同点:

  1. 用他们都可以取代对 char* 的使用
  2. 都封装了有丰富的字符串操作接口
  3. 他们都是 C++ 的类库

   以 string 的使用为例,不能有如下的用法:

string* pstr =NULL;				//定义一个指向字符串的指针
pstr->append("Hello world.");	//再该字符串的末尾粘接上另一个字符。这样做编译器不会有任何警告和错误,但是运行的时候就会有异常。

   原因是没有理解 string 是一个类,而在定义类的对象的时候是需要调用其构造函数的。上面既没有调用 string 的构造函数,而且还把指针赋值NULL,很明显调用该类的对象的接口的时候会出错。但是编译器却发现不了这个问题的。

   正确的方法是如下:

/*
	这里必须要使用 c++ 的宏 new,而不能用 c 中的 malloc,原因是 new 不但会分配一块内存,还会执行了类的构造函数。
当然, string 类的实例化还可以通过已有的某个 string 对象进行。
*/

string* pstr = new string("Hello world.");
pstr->append("Hello world.");
cout<<"string str is:"<<str<<endl;
  1. 他们都是用了模板的技术

不同之处

  1. CString 类是微软的 visual c++ 提供的 MFC 里面的一个类,所以只有支持 MFC 的工程才可以使用。如在 linux 上的工程就不能用 CString 了,只能用标准 C++ 中的 string 类了。另外,因为 string 类是在 c++ 标准库,所以它被封装在了 std 命名空间中,使用之前需要声明 using namespace std ,而 CString 类并不在 std 命名空间中,因为它不是 c++ 的标准库,只是微软的一个封装库,只是微软的一个封装库。这点看来用 string 类的程序的一致性更好。
  2. string类既是一个标准 c++ 的类库,同时也是STL(Standard Template Library,标准模板库)中的类库,所以支持Iterator操作。
  3. CString 类和 string 类提供的方法接口并不完全相同,所以不要糊里糊涂的认为某个类中怎么没有另外一个类中的方法啊。
  4. 他们和char*之间的转换方法也不一样。

详情请见

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值