string与char*和char[]之间的相互转换

先说一下string与char*和char[]的差别:
string 是一个类,而char *是一个指向char类型的指针,string封装了char *,是一个char *类型的容器。string的内存管理是由系统维护,只有在系统内存耗尽的情况下,才有可能出现内存相关问题;char * 是一个指针,可以指向一个字符串数组,这个数组可以在栈上分配,也可以在堆上分配,如果是在堆上分配,需要用户手动释放内存,char *的内存管理是由用户自己处理,容易出现内存不足等问题。
标准的string类提供了STL容器接口,具有一些方法比如begin()、end()、length()等,也可以进行截取substr()等方法,string可以根据下标访问迭代器也可以进行定位。string不一定以NULL('\0')结束。所以,不能将string直接赋值给char*。
char*与char[]是一样的,是以NULL('\0')结束;
char*与char[]对象是首地址,string的对象不是,所以不能当做首地址;
1、string 转换为char* :
(1)使用data()操作
string str = "hello world!";
char* p = (char*)str1.data();
(2)使用copy()操作
string str = "hello world!";
char p[40];
int copyLen = 7 ;
str.copy(p, copyLen , 0); //copyLen:复制字符个数,0:复制起始位置
*(p + copyLen) = '\0'; //添加结束符
PS:动态分配内存的方法1
string str =  "hello world!";
int copyLen = str.length();
char* p = new char[copyLen + 1];
str.copy(p, copyLen, 0); //copyLen:复制字符个数,0:复制起始位置
*(p + copyLen) = '\0'; //添加结束
if (p != NULL)
{
delete p;
p == NULL;
}
(3)使用strcpy
string str =  "hello world!";
const int len = str.length();
char* p = new char[len + 1];
strcpy(p,str.c_str()); 
*(p + copyLen) = '\0'; //添加结束
if (p != NULL)
{
delete p;
p == NULL;
}
2、string 转换为const char* :
string str1 = "hello world!";
const char *p1 = str1.c_str();
3、char 转换为string
char a = 'a' ; 
string str(&a,1) ; 
4、char* 转换为string
char* p1 = "hello world!";
string str1 = p1;

char p2[] = "hello world!";
string str2 = p2;
5、const char*转string
   直接赋值即可
   const char* c_s = "hello world!";
   string s(c_s);
6、char* 转const char*
   直接赋值即可
   char* p = "hello world!";
   const char* cp = p;
7、const char*转char*
   这与string转char*比较像:
   const char* cp = "hello world!";
   const int len = strlen(cp) ;
   char* p = new char[len];//足够长
   strcpy(p,cp);
    if (p != NULL)
{
delete p;
p == NULL;
}




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值