string与char* 互相转换以及周边问题

先插一个小知识点

string str = "abc"

str += 'd';

cout<<str<<endl;  //"abcd"   所以: string+char是被允许的.

 

string 转char* 的时候  string.c_str() 和string.data()的区别

c_str()返回的以'\0'结尾

data()返回的不以'\0'结尾

copy(p,n,size_type_off = 0);  从string类型对象中最多复制n个字符到字符指针p指向的空间中,默认从首字符开始,但是也可以指定开始复制的位置

 

string的c_str()返回的指针是由string管理的,他的生命周期是string的生命期 例如下面的例子是错误的:

char* p;

{

   string a = "123";

   p = a.c_str();

}

cout<<p<<endl;   //错误,因为指针无效了

 

另外这个指针始终指向的是string的内容, 如果想让指针的东西不变的话,只能先strcpy()复制到自己的内存中

1 string s = "123";
2 
3 const char* a = s.c_str();
4 char* b = strdup(a);
5 cout<<a;   //123
6 
7 s = "abc";
8 
9 cout<<a;  //abc

cout<<b; //abc

 

 

char* 转string

char* p = "abc";

string s = string(p);

 

string 和CString的区别

cstring是ATL/MFC共享的 (ATL, Active Template Library 活动模板库, 是一种微软程序块,支持利用c++编写ASP代码以及其它ActiveX程序)

string 是c++标准库的

 

string 转CString

CString a;

a.format("%s", string.c_str());

char* 转CString

CString a;

a.format("%s", char*);

char* 转int

#include<stdlib.h>

int atoi(char*);    long atol(char*);   

 

posted @ 2016-04-17 13:19  哈哈不是嘎嘎  阅读(249)  评论(0编辑  收藏  举报