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*);