const char * , char * , char[] , string 互相转换.

 

原类型char *

 

 

转string

 

 

也就是 char * 转 string.

赋值即可.

char *st = "hello"; // (编译提示警告)
string st1 = st;

 

转char[]

 

也就是 char * 转 char[]

不能直接转,

可以内存拷贝.

 

char *st = "hehe"; // 编译器警告
char st1[] = "lalalala";
strncpy(st1, st, strlen(st) + 1); // 注意加1操作 

 

转const char *

 

也就是 char * 转 const char *

直接赋值

char *st = "hehe"; // (编译提示警告)
const char *st1 = st;

 

 

 

 

 

原类型string

 

 

转const char *

也就是 string 转 const char*

 

很简单.string类型直接有个转换函数.

 

string st = "My test";
const char *st1 =  st.c_str();

 

 

转char *

也就是 string 转 char*

这步不能直接转.

实际上多数是先转const char 后再换成char

 

string st = "My test";
char *st1 = const_cast(st.c_str()) ;

 

 

 

转char[]

 

也就是 string 转 char[]

也是不能直接赋值转换

要通过内存拷贝.

string ts = "My test1";
char ts1[] = "lalallalalaaaa";
strncpy(ts1, ts.c_str(), ts.length() + 1); // 注意,一定要加1,否则没有赋值'\0' 

 

另外也可以用for循环之类的

//ts string 类型
//ts1 char[] 类型 
ts1[i] = ts[i];

循环结束后要补一个

ts1[i+1] = '\0';

 

 

原类型是char[]

 

 

转 string

也就是 char[] 转  string.

 

直接可以赋值.

char st[] = "hello";
string st1 = st;

 

 

转 char *

也就是 char[] 转 char *

也是直接赋值.

 

char str[] = "lala";
char *str1 = str;

 

 

 

转 const char *

也就是 char[] 转  const char *

 

其实前面也说过,char 转 const char 可以直接拷贝.

这里也可以直接试试,不行就先转char 再转 const char .

 

char str[] = "lala";
char *str1 = str;
const char* =str1 ;

 

 

 

参考

本文基本上90%以上内容都是copy 于下面这个链接

https://www.cnblogs.com/qiumingcheng/p/11204863.html