char * 可以转string,直接赋值即可。不能单独赋int和c字符类型值。
string s1("demo1");
string s1 = "demo";
char *p = "demo";
s1 = p;
string转char*有三种方式:c_str(),data(),copy()
c_str()返回一个c风格的字符数组,带有'\0'结束
data()返回一个数组,不自动增加‘\0’
copy()拷贝一块字符到新的内存,需要新分配一块内存用于存放。
前两个函数,原有内容发生变化,地址指的内容也会变化,使用copy不会发生这种问题。(见例子3)
const char *p = s.data();
const char * p = s.c_str();
char *p = new char[s.length() + 1];
s.copy(p, string::npos);
p[s.length()] = 0;
用好,释放 p
例子3:
string s1("demo1");
string s1 = "demo";
char *p = "demo";
s1 = p;
string转char*有三种方式:c_str(),data(),copy()
c_str()返回一个c风格的字符数组,带有'\0'结束
data()返回一个数组,不自动增加‘\0’
copy()拷贝一块字符到新的内存,需要新分配一块内存用于存放。
前两个函数,原有内容发生变化,地址指的内容也会变化,使用copy不会发生这种问题。(见例子3)
const char *p = s.data();
const char * p = s.c_str();
char *p = new char[s.length() + 1];
s.copy(p, string::npos);
p[s.length()] = 0;
用好,释放 p
例子3:
std::string s1 = "demo 123456\n \0";
const char *p1 = s1.c_str();
const char *p2 = s1.data();
s1 = "345";
s1 内容发生变化后,p1和p2指针内容的地址也发生变化。
s1 内容发生变化后,p1和p2指针内容的地址也发生变化。
本文介绍如何在C++中实现char*与string类型的相互转换,并详细解释了string转char*的三种方法:c_str(), data() 和 copy()。同时通过示例展示了不同方法在字符串内容变化时的行为差异。
611

被折叠的 条评论
为什么被折叠?



