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