char[]创建一个数组,可以用sizeof计算其长度,数组内容可以修改,因此当需要改变字符串内容时建议用char[];
char*为一个指针,用strlen计算内容长度,可以声明变量,事实上,vs2019不允许用char*声明常量,会编译报错。
const char[] 数组内容不可修改,适用于全局字符串常量,使用const char*时指针是可写的。
string转char*:
c++11 中string的自带函数有data和c_str可以转为const char*,c++17中的data函数可以直接转为char*。
11中有几种办法也可以将string转为char*:
1.利用vector,有复制字符串。
std::string foo("text"); std::vector<char> fcv(foo.begin(), foo.end());
fcv.emplace_back('\0');//不要忘记终止符 auto p = fcv.data();
2.利用string对象的连续储存,这样不用复制字符串,比较简单,但内容关联原本字符串,修改同步。
std::string ss("aaaaa!"); char* p = &*ss.begin();// &ss[0] std::cout << p << std::endl; auto plen = strlen(p); p[1] = 'b';
推荐这两种,足够简单,自己手动维护代价偏高。
std::string单字符转char直接取下标即可,char转string的话利用string构造函数:
string(1, char);