简述:
1) char*转string:可以直接赋值。
2) char[]转string:可以直接赋值。
3) char*转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。
4) string转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数
5) string转char*:调用string对象的c_str函数或data函数或copy函数。
6) char[]转char*:直接赋值即可。使用时,要对源格式和目标格式进行初始化。源格式赋值为具体的内容,目标格式赋值为空。
总结如下:
A. 变成string,直接赋值。
B. char[]变成别的,直接赋值。
C. char*变const char*容易,const char*变char*麻烦。<const_cast><char*>(const char*);
D. string变char*要通过const char*中转。
E. 变成char[]。string逐个赋值,char* const char* strncpy_s()
1、string转char*
把string转换为char* 有3种方法:data(); c_str(); copy();
其中,data()除了返回字符串内容外,不附加结束符'\0',而c_str()返回一个以‘\0’结尾的字符数组。
1) 调用string的data()函数
string str = "hello"; const char* p = str.data();//加const或者用char *p=(char*)str.data();
同时有一点需要说明,这里在devc++中编译需要添加const,否则会报错invalid conversion from const char* to char *,这里可以再前面加上const或者在等号后面给强制转化成char*的类型。
2) 调用string的c_str()函数
string str=“world”; const char *p = str.c_str();//同上,要加const或者等号右边用char*
//一定要使用strcpy()函数等来操作方法c_str()返回的指针 //比如:最好不要这样: char* c; string s="1234"; c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理 //应该这样用: char c[20]; string s="1234"; strcpy(c,s.c_str()); //这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作 //再举个例子 //c_str() 以 char* 形式传回 string 内含字符串 //如果一个函数要求char*参数,可以使用c_str()方法: string s = "Hello World!"; printf("%s", s.c_str()); //输出 "Hello World!"
3) 调用string的copy()函数
string str="hmmm"; char p[50]; str.copy(p, 5, 0);//这里5代表复制几个字符,0代表复制的位置, *(p+5)=‘\0’;//注意手动加结束符!!!
2、char*转string
可以直接赋值
string s; char *p = "hello"; s = p;
3、string转char[]
不可以直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数
string pp = "dagah"; char p[8]; int i; for( i=0;i<pp.length();i++) p[i] = pp[i]; p[i] = '\0'; printf("%s\n",p); cout<<p;
4、char[] 转string
可以直接赋值
string s; char ch[] = "hello world"; s = ch;
5、char[]转char*
可以直接赋值
6、char*转char[]
不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。
7、代码实现
1)string转为其他类型
① string转const char*② string转char*#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { std::string str = "HelloWorld!"; //初始化string类型,并具体赋值 const char* constc = nullptr;//初始化const char*类型,并赋值为空 constc= str.c_str(); //string类型转const char*类型 printf_s("%s\n", str.c_str()); //打印string类型数据 .c_str() printf_s("%s\n", constc); //打印const char*类型数据 return 0; }
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { std::string str = "HelloWorld!"; //初始化string类型,并具体赋值 char* c = nullptr; //初始化char*类型,并赋值为空 const char* constc = nullptr;//初始化const char*类型,并赋值为空 constc= str.c_str(); //string类型转const char*类型 c= const_cast<char*>(constc); //const char*类型转char*类型 printf_s("%s\n", str.c_str()); //打印string类型数据 .c_str() printf_s("%s\n",c); //打印char*类型数据 return 0; }
③ string转char[]
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { std::string str = "HelloWorld!"; //初始化string类型,并具体赋值 char arrc[20] = {0}; //初始化char[]类型,并赋值为空 for (int i=0; i<str.length();i++) //string类型转char[]类型 { arrc[i]=str[i]; } printf_s("%s\n", str.c_str()); //打印string类型数据 .c_str() printf_s("%s\n", arrc); //打印char[]类型数据 return 0; }
2)const char*转为其他类型
① const char*转string#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { const char* constc = "Hello World!"; //初始化const char* 类型 std::string str; //初始化string类型 str= constc; //const char*类型转string类型 printf_s("%s\n", constc); //打印const char* 类型数据 printf_s("%s\n", str.c_str()); //打印string类型数据 return 0; }
② const char*转char*
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { const char* constc = "Hello World!"; //初始化const char* 类型 char* c = nullptr; //初始化char*类型 c= const_cast<char*>(constc); //const char*类型转char*类型 printf_s("%s\n", constc); //打印const char* 类型数据 printf_s("%s\n", c); //打印char*类型数据 return 0; }
③ const char*转char[]
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { const char* constc = "Hello World!"; //初始化const char* 类型 char arrc[20] = { 0 }; //初始化char[]类型,并赋值为空 strncpy_s(arrc,constc,20); //const char*类型转char[]类型 printf_s("%s\n", constc); //打印const char* 类型数据 printf_s("%s\n", arrc); //打印char[]类型数据 return 0; }
3)char*转为其他类型
① char*转string② char*转const char*int _tmain(intargc, _TCHAR* argv[]) { char* c = "HelloWorld!"; //初始化char* 类型,并具体赋值 std::string str; //初始化string类型 str= c; //char*类型转string类型 printf_s("%s\n", c); //打印char* 类型数据 printf_s("%s\n", str.c_str()); //打印string类型数据 return 0; }
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { char* c = "HelloWorld!"; //初始化char* 类型,并具体赋值 const char* constc = nullptr; //初始化const char* 类型 constc= c; //char*类型转const char* 类型 printf_s("%s\n", c); //打印char* 类型数据 printf_s("%s\n", constc); //打印const char* 类型数据 return 0; }
③ char*转char[]
#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { char* c = "HelloWorld!"; //初始化char* 类型,并具体赋值 char arrc[20] = { 0 }; //初始化char[] 类型,并具体赋值 strncpy_s(arrc,c,20); //char*类型转char[] 类型 printf_s("%s\n", c); //打印char* 类型数据 printf_s("%s\n", arrc); //打印char[]类型数据 return 0; }
4)char[]转为其他类型#include "stdafx.h" #include <iostream> int _tmain(intargc, _TCHAR* argv[]) { char arrc[20] = "HelloWorld!"; //初始化char[] 类型,并具体赋值 std::string str; //初始化string const char* constc = nullptr; //初始化const char* char*c = nullptr; //初始化char* str= arrc; //char[]类型转string类型 constc= arrc; //char[]类型转const char* 类型 c= arrc; //char[]类型转char*类型 printf_s("%s\n", arrc); //打印char[]类型数据 printf_s("%s\n", str.c_str()); //打印string类型数据 printf_s("%s\n", constc); //打印const char* 类型数据 printf_s("%s\n", c); //打印char*类型数据 return 0; }