1.1 基本概念
· char[]:字符串数组
· char*:指向字符串的指针
· string:string类对象
1.2 xxx->char[]
· char*->char[]
o method1:strcpy(dest,src)把从src地址开始且含有'\0'结束符的字符串复制 到 以dest开始的地址空间。
strcpy(c,p); //不会检查目的字符串长度是否大于源字符串长度,存在buffer溢出的危险
o method2:
sprintf(c ,"%s" ,p); //不会检查目的字符串长度是否大于源字符串长度,存在buffer溢出的危险
· string->char[]
o method1:根据下标,循环赋值
o method2:借助char*,将string->char*->char[]
strcpy(c,s.c_str());
1.3 xxx->char*
· char[]->char* 直接赋值
o p = c;
· string->char*
o method1::c_str()返回const char*
p = (char*)s.c_str();
o method2:copy()
s.copy(p,s.length()+1,0); //error
char *newc = (char*) malloc(100*sizeof(char));
s.copy(newc,s.length());//不会检查目的字符串长度是否大于源字符串长度,存在buffer溢出的危险,没有将‘\0’写入,需手动添加
*(newc+s.length()+1) = '\0';
o method3:data()返回constchar*,不带结束符
p = (char*)s.data();
1.4 xxx->string
· char[]->string直接赋值
o s = c;
· char*->string直接赋值
o s = p;
1.5 注意点
· 将string s利用c_str()转为char* c时,返回的是一个临时指针,不能对其进行操作若s改变,则c也跟着改变(不可控);因此string->char* 推荐使用strcpy()
o char* cc = new char[20];
string ss="1234";
cc = (char*)ss.c_str();
strcpy(cc, ss.c_str());//char*需要预先分配内存空间
cout<<cc<<endl; //输出:1234
ss="abcd";
cout<<cc<<endl; //c_str()输出:abcd,strcpy(0)输出:1234