必会知识点。
目录
- #include
- #include
- #include
-
- using namespace std;
-
- int main() {
- // char[] 转 char*、string,直接赋值
- char ch0[] = "ali";
- char *str00 = ch0;
- str00[0] = 'x'; // str00指向的是array首地址,可以修改
- string str01 = ch0;
- cout << ch0 << endl; // xli
- cout << str00 << endl; // xli
- cout << str01 << endl; // xli
-
- // char* 转 char[]、string
- char tmp[] = "bli";
- char *str10 = tmp;
- char ch1[10] = {0};
- strcpy(ch1, str10); // 用strcpy(dst, src)
- string str11 = str10; // 直接赋值
- str11[0] = 'd';
- cout << str10 << endl; // bli
- cout << ch1 <
// bli - cout << str11 << endl; // dli
-
- // string 转 char*、char[]
- string str20 = "cli";
- char* str21 = const_cast<char*>(str20.data()); // 用data(),c++11前不含/0,c++11后与c_str()相同
- str20[0] = 'z'; // 可以修改
- char* str22 = const_cast<char*>(str20.c_str()); // 用c_str(),含/0
- char ch2[10] = {0};
- strcpy(ch2, str20.c_str()); // 用strcpy(dst, src)配合c_str()
- cout << str20 << endl; // zli
- cout << str21 << endl; // zli
- cout << str22 << endl; // zli
- cout << ch2 << endl; // zli
-
- return 0;
- }
不经思考是记不住的,让我们来看看为什么是这样转!
char[]是array,char*是pointer,string是c++定义的一个类型,字符串"ali"并不是string,字符串是const的不可修改,而sting是内置类装数据(比如"cli")和接口(比如c_string()),里面数据可以修改。
转string,可以直接赋值。
转char*,char[]是直接赋值,string要c_str()取数据然后去const。
转char[],都要用strcpy(dst, src)。dst、src是指针。