在C++中,char*、const char*和std::string之间进行转换是常见的操作。以下是它们之间的相互转换方法:
string 转 const char*:
std::string str = "example";
const char* c_str = str.c_str();
c_str()
函数返回一个指向字符串内部缓冲区的常量指针,该缓冲区以空字符('\0')结束。
const char* 转 string:
const char* c_string = "example";
std::string str(c_string);
// 或者使用构造函数的另外一种形式:
std::string str = c_string;
可以直接用const char*
初始化一个std::string
对象。
string 转 char*:
这个转换需要特别小心,因为std::string
的内容不能直接赋给非const指针。如果你需要一个可修改的字符数组,你需要分配足够的内存并复制字符串内容:
std::string str = "example";
char* mutable_cstr = new char[str.size() + 1]; // +1 for null terminator
std::strcpy(mutable_cstr, str.c_str());
// 使用完后记得释放内存
delete[] mutable_cstr;
//或者,在确定字符串长度不会超出指定范围时,可以先声明一个足够大的数组:
std::string str = "example";
char mutable_cstr[50];
strcpy(mutable_cstr, str.c_str()); // 注意潜在的安全风险,需确保str内容适合放入mutable_cstr中
char* 转 string:
char* c_string = "example"; // 注意:在现代C++中尽量避免裸指针直接指向字面常量字符串
std::string str(c_string);
// 或者
std::string str = c_string;
同样可以直接使用char*
初始化或赋值给std::string
对象,但务必保证传入的char*
指向有效的、以'\0'结尾的字符数组。
以上转换中,const char*
通常用于表示只读字符串,而char*
更多地用于可修改的字符数组。
在处理字符串时,建议尽可能使用std::string
来提高安全性与便利性,并减少手动内存管理的需求。