首先需要明确的是:
string自带的c_str() 可以返回一个指向string对象首字符的c语言风格字符指针(const char*)
也就是说const char* 可以用来接收c_str() 的返回值,但是char* 不可以
所以有:
- string s 转为 const char*, char*
- a. string s 转为 const char*
const char* cc = s.c_str();
//(其实这样转不安全,如果s被析构了或者s内容被改了,cc要么指向一片内存垃圾,要么指向的内容被改了自己却不知道)
- b. string s 转为 char*
const int len = s.size();
char* c = new char[len];
strcpy(c, s.c_str());//亲测strcpy(c,s)不行,报错string不能转为const char*,strcpy参数列表是(char*, const char*)
- const char* cc , char* c 转为string
string s(cc);//调用string的转换(应该是)构造函数给赋值初始化掉了
//string s(c);
- const char* , char*
- a. char* c 转为 const char* cc 可以用指针常量(底层const)指向非常量
const char* cc = c;
- b. const char* cc 转为 char* c 不能直接转,用strcpy()
const int len = strlen(cc);
char* c = new char[len+1];//多个位置放'\0'
strcpy(c, cc);