关于string,const char*,char*的互转问题

本文详细探讨了C++中std::string对象如何转换为const char*以及char*,并阐述了转换过程中的安全性和注意事项。通过示例代码展示了如何在不同情况下进行转换,并强调了转换过程中可能出现的问题,如对象析构导致的悬挂指针等。
摘要由CSDN通过智能技术生成

首先需要明确的是
string自带的c_str() 可以返回一个指向string对象首字符的c语言风格字符指针(const char*)
也就是说const char* 可以用来接收c_str() 的返回值,但是char* 不可以

所以有:

  1. string s 转为 const char*, char*
  • a. string s 转为 const char*
     const char* cc = s.c_str();
//(其实这样转不安全,如果s被析构了或者s内容被改了,cc要么指向一片内存垃圾,要么指向的内容被改了自己却不知道)
  • b. string s 转为 char*
	const int len = s.size();
	char* c = new char[len];
	strcpy(c, s.c_str());//亲测strcpy(c,s)不行,报错string不能转为const char*,strcpy参数列表是(char*, const char*)
  1. const char* cc , char* c 转为string
 	string s(cc);//调用string的转换(应该是)构造函数给赋值初始化掉了
 	//string s(c);
  1. const char* , char*
  • a. char* c 转为 const char* cc 可以用指针常量(底层const)指向非常量
	const char* cc = c;
  • b. const char* cc 转为 char* c 不能直接转,用strcpy()
	const int len = strlen(cc);
	char* c = new char[len+1];//多个位置放'\0'
	strcpy(c, cc);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值