亲测过。这字符串转换真心纠结
#include#include using namespace std; int main() { char str1[] = { "abcd" }; char str2[4] = { 'a','b','c',0 }; char str3[4] = { 'a','b','c','d' };//单纯的字符数组,这种字符数组,因为末尾没有0,所以把他当作字符串直接输出就会有内存里其他数据,就出现了“烫”。。 char* str4 = new char[4]{ 'a','b','c',0 }; //字符指针,指向字符的指针 const char* str5 = "abcd";//这是一个常量,当你对这个数据的内存操作的时候就会报错 //char* str6 = "abcd"; //error ,const char*类型的值不能用作char*的初始化 cout << "str1:" << str1 << endl; cout << "str2:" << str2 << endl; cout << "str3:" << str3 << endl; cout << "str4:" << str4 << endl; cout << "str5:" << str5 << endl; //输出: //str1:abcd //str2 : abc //str3 : abcd烫烫烫烫abc //str4 : abc //str5 : abcd cout << "********************string、char *、char[]相互转换******************************" << endl; //*******************string、char *、char[]相互转换*************************** //############# string 转 char* ##################### cout << "############# string 转 char* #####################" << endl; string data1 = "helloworld"; const char* data2 = data1.c_str(); const char* data3 = data1.data(); //char* data11 = data1.c_str();//不允许const转换成char * cout << "data1:" << data1 << endl; cout << "data2:" << data2 << endl; cout << "data3:" << data3 << endl; cout << endl; //############# const char* 转 string ##################### cout << "############# const char* 转 string #####################" << endl; string data4; const char* data5= "helloworld"; data4 = data5; cout << "data4:" << data4 << endl; cout << "data5:" << data5 << endl; cout << endl; //############# char* 转 string ##################### cout << "############# char* 转 string #####################" << endl; string data6; char* data7 = new char[10]{ 'a','b','c',0 };//new/delete、new[]/delete[] 要配套使用 data6 = data7; cout << "data6:" << data6 << endl; cout << "data7:" << data7 << endl; cout << endl; delete[] data7; //############# char[] 转 string ##################### cout << "############# char[] 转 string #####################" << endl; string data8; char data9[] = "helloworld"; data8 = data9; cout << "data8:" << data8 << endl; cout << "data9:" << data9 << endl; cout << endl; //############# string 转 char[] ##################### cout << "############# string 转 char[] #####################" << endl; string data10 = "helloworld"; char data11[20]; int i; for (i = 0; i < data10.length(); i++) { data11[i] = data10[i]; } data11[i] = ' '; cout << "data10:" << data10 << endl; cout << "data11:" << data11 << endl; cout << endl; //############# char[] 转 char* ##################### cout << "############# char[] 转 char* #####################" << endl; char data14[20] = "helloworld"; char* data15 = data14; cout << "data14:" << data14 << endl; cout << "data15:" << data15 << endl; cout << endl; //############# char* 转 char[] ##################### cout << "############# char* 转 char[] #####################" << endl; char data12[20]; char* data13 = new char[10]{ 'a','b','c',0 }; strcpy_s(data12, data13); cout << "data12:" << data12 << endl; cout << "data13:" << data13 << endl; cout << endl; delete[] data13; char data16[20]; char* data17 = new char[10]{ 'a','b','c',0 }; cout << "data17:" << data17 << endl; i = 0; while (*data17 != ' ') data16[i++] = *data17++;//这里修改了data17的内存指向,*p++,先p指向首地址,然后p在指向下一个内存单元 data16[i] = ' '; //添加结束符 cout << "data16:" << data16 << endl; cout << "data17:" << data17 << endl; cout << endl; //delete[] data17;//这里不要用,使用了会报错,因为此时data17已经为空了只有一个' ' system("pause"); return 0; }
输出结果:
str1:abcd
str2:abc
str3:abcd烫烫烫烫abc
str4:abc
str5:abcd
##########################string、char *、char[]相互转换##########################
############# string 转 char* #####################
data1:helloworld
data2:helloworld
data3:helloworld
############# const char* 转 string #####################
data4:helloworld
data5:helloworld
############# char* 转 string #####################
data6:abc
data7:abc
############# char[] 转 string #####################
data8:helloworld
data9:helloworld
############# string 转 char[] #####################
data10:helloworld
data11:helloworld
############# char[] 转 char* #####################
data14:helloworld
data15:helloworld
############# char* 转 char[] #####################
data12:abc
data13:abc
data16:abc
data17:


![C++: 字符串string、char *、char[]相互转换 C++: 字符串string、char *、char[]相互转换](http://www.mshxw.com/aiimages/31/433512.png)
