C++ char*、const char*和string 三者转换

在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来提高安全性与便利性,并减少手动内存管理的需求。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangnaisheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值