C++中string、char *、char[]、const char*的转换

原文地址:https://blog.csdn.net/hebbely/article/details/79577880

简述:

1) char*转string:可以直接赋值。
2) char[]转string:可以直接赋值。
3) char*转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。
4) string转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数
5) string转char*:调用string对象的c_str函数或data函数或copy函数。
6) char[]转char*:直接赋值即可。

使用时,要对源格式和目标格式进行初始化。源格式赋值为具体的内容,目标格式赋值为空。

总结如下:

 

 

A. 变成string,直接赋值。
B. char[]变成别的,直接赋值。
C. char*变const char*容易,const char*变char*麻烦。<const_cast><char*>(const char*);
D. string变char*要通过const char*中转。
E. 变成char[]。string逐个赋值,char* const char* strncpy_s()

 

1、string转char*

 

把string转换为char* 有3种方法:data(); c_str(); copy();

其中,data()除了返回字符串内容外,不附加结束符'\0',而c_str()返回一个以‘\0’结尾的字符数组。

1) 调用string的data()函数

 

 
  1. string str = "hello";

  2. const char* p = str.data();//加const或者用char *p=(char*)str.data();

 

同时有一点需要说明,这里在devc++中编译需要添加const,否则会报错invalid conversion from const char*  to char *,这里可以再前面加上const或者在等号后面给强制转化成char*的类型。

 

2) 调用string的c_str()函数

 

 
  1. string str=“world”;

  2. const char *p = str.c_str();//同上,要加const或者等号右边用char*

 
  1. //一定要使用strcpy()函数等来操作方法c_str()返回的指针

  2. //比如:最好不要这样:

  3. char* c;

  4. string s="1234";

  5. c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理

  6.  
  7. //应该这样用:

  8. char c[20];

  9. string s="1234";

  10. strcpy(c,s.c_str());

  11. //这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作

  12.  
  13. //再举个例子

  14. //c_str() 以 char* 形式传回 string 内含字符串

  15. //如果一个函数要求char*参数,可以使用c_str()方法:

  16. string s = "Hello World!";

  17. printf("%s", s.c_str()); //输出 "Hello World!"

 

3) 调用string的copy()函数

 

 
  1. string str="hmmm";

  2. char p[50];

  3. str.copy(p, 5, 0);//这里5代表复制几个字符,0代表复制的位置,

  4. *(p+5)=‘\0’;//注意手动加结束符!!!

 

2、char*转string

 

可以直接赋值

 

 
  1. string s;

  2. char *p = "hello";

  3. s = p;

 

3、string转char[]

 

不可以直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数

 

 
  1. string pp = "dagah";

  2. char p[8];

  3. int i;

  4. for( i=0;i<pp.length();i++)

  5. p[i] = pp[i];

  6. p[i] = '\0';

  7. printf("%s\n",p);

  8. cout<<p;

 

4、char[] 转string

 

可以直接赋值

 

 
  1. string s;

  2. char ch[] = "hello world";

  3. s = ch;

 

5、char[]转char*

可以直接赋值

 

6、char*转char[]

 

不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。

 

 

7、代码实现

 

1)string转为其他类型
① string转const char*

 

 
  1. #include "stdafx.h"

  2. #include <iostream>

  3.  
  4. int _tmain(intargc, _TCHAR* argv[])

  5. {

  6. std::string str = "HelloWorld!"; //初始化string类型,并具体赋值

  7. const char* constc = nullptr;//初始化const char*类型,并赋值为空

  8. constc= str.c_str(); //string类型转const char*类型

  9. printf_s("%s\n", str.c_str()); //打印string类型数据 .c_str()

  10. printf_s("%s\n", constc); //打印const char*类型数据

  11. return 0;

  12. }

② string转char*

 

 
  1. #include "stdafx.h"

  2. #include <iostream>

  3.  
  4. int _tmain(intargc, _TCHAR* argv[])

  5. {

  6. std::string str = "HelloWorld!"; //初始化string类型,并具体赋值

  7. char* c = nullptr; //初始化char*类型,并赋值为空

  8. const char* constc = nullptr;//初始化const char*类型,并赋值为空

  9. constc= str.c_str(); //string类型转const char*类型

  10. c= const_cast<char*>(constc); //const char*类型转char*类型

  11. printf_s("%s\n", str.c_str()); //打印string类型数据 .c_str()

  12. printf_s("%s\n",c); //打印char*类型数据

  13. return 0;

  14. }

③ string转char[]

 

 
  1. #include "stdafx.h"

  2. #include <iostream>

  3.  
  4. int _tmain(intargc, _TCHAR* argv[])

  5. {

  6. std::string str = "HelloWorld!"; //初始化string类型,并具体赋值

  7. char arrc[20] = {0}; //初始化char[]类型,并赋值为空

  8. for (int i=0; i<str.length();i++) //string类型转char[]类型

  9. {

  10. arrc[i]=str[i];

  11. }

  12. printf_s("%s\n", str.c_str()); //打印string类型数据 .c_str()

  13. printf_s("%s\n", arrc); //打印char[]类型数据

  14. return 0;

  15. }

2)const char*转为其他类型
① const char*转string

 

 
  1. #include "stdafx.h"

  2. #include <iostream>

  3.  
  4. int _tmain(intargc, _TCHAR* argv[])

  5. {

  6. const char* constc = "Hello World!"; //初始化const char* 类型

  7. std::string str; //初始化string类型

  8. str= constc; //const char*类型转string类型

  9. printf_s("%s\n", constc); //打印const char* 类型数据

  10. printf_s("%s\n", str.c_str()); //打印string类型数据

  11. return 0;

  12. }

② const char*转char*

 

 
  1. #include "stdafx.h"

  2. #include <iostream>

  3.  
  4. int _tmain(intargc, _TCHAR* argv[])

  5. {

  6. const char* constc = "Hello World!"; //初始化const char* 类型

  7. char* c = nullptr; //初始化char*类型

  8. c= const_cast<char*>(constc); //const char*类型转char*类型

  9. printf_s("%s\n", constc); //打印const char* 类型数据

  10. printf_s("%s\n", c); //打印char*类型数据

  11. return 0;

  12. }

③ const char*转char[]

 

 
  1. #include "stdafx.h"

  2. #include <iostream>

  3.  
  4. int _tmain(intargc, _TCHAR* argv[])

  5. {

  6. const char* constc = "Hello World!"; //初始化const char* 类型

  7. char arrc[20] = { 0 }; //初始化char[]类型,并赋值为空

  8. strncpy_s(arrc,constc,20); //const char*类型转char[]类型

  9. printf_s("%s\n", constc); //打印const char* 类型数据

  10. printf_s("%s\n", arrc); //打印char[]类型数据

  11. return 0;

  12. }

3)char*转为其他类型
① char*转string

 

 
  1. int _tmain(intargc, _TCHAR* argv[])

  2. {

  3. char* c = "HelloWorld!"; //初始化char* 类型,并具体赋值

  4. std::string str; //初始化string类型

  5. str= c; //char*类型转string类型

  6. printf_s("%s\n", c); //打印char* 类型数据

  7. printf_s("%s\n", str.c_str()); //打印string类型数据

  8. return 0;

  9. }

② char*转const char*

 

 
  1. #include "stdafx.h"

  2. #include <iostream>

  3.  
  4. int _tmain(intargc, _TCHAR* argv[])

  5. {

  6. char* c = "HelloWorld!"; //初始化char* 类型,并具体赋值

  7. const char* constc = nullptr; //初始化const char* 类型

  8. constc= c; //char*类型转const char* 类型

  9. printf_s("%s\n", c); //打印char* 类型数据

  10. printf_s("%s\n", constc); //打印const char* 类型数据

  11. return 0;

  12. }

 

 

③ char*转char[]

 

 
  1. #include "stdafx.h"

  2. #include <iostream>

  3.  
  4. int _tmain(intargc, _TCHAR* argv[])

  5. {

  6. char* c = "HelloWorld!"; //初始化char* 类型,并具体赋值

  7. char arrc[20] = { 0 }; //初始化char[] 类型,并具体赋值

  8. strncpy_s(arrc,c,20); //char*类型转char[] 类型

  9. printf_s("%s\n", c); //打印char* 类型数据

  10. printf_s("%s\n", arrc); //打印char[]类型数据

  11. return 0;

  12. }


4)char[]转为其他类型

 

 
  1. #include "stdafx.h"

  2. #include <iostream>

  3.  
  4. int _tmain(intargc, _TCHAR* argv[])

  5. {

  6. char arrc[20] = "HelloWorld!"; //初始化char[] 类型,并具体赋值

  7. std::string str; //初始化string

  8. const char* constc = nullptr; //初始化const char*

  9. char*c = nullptr; //初始化char*

  10.  
  11. str= arrc; //char[]类型转string类型

  12. constc= arrc; //char[]类型转const char* 类型

  13. c= arrc; //char[]类型转char*类型

  14.  
  15. printf_s("%s\n", arrc); //打印char[]类型数据

  16. printf_s("%s\n", str.c_str()); //打印string类型数据

  17. printf_s("%s\n", constc); //打印const char* 类型数据

  18. printf_s("%s\n", c); //打印char*类型数据

  19. return 0;

  20. }

  21. 补充:

  22. 在string转换为char*的时候用到的data()或者c_str()返回的都是返回const char*,可能用到的时候会出现无法将从const char*转化为char*的错误,那就需要转化一下,具体的方法如下:1. const char* p = str.c_str();
    2.使用const_cast转换char* p = const_cast<char*>(str.c_str());,
    或者直接用那个copy那种方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值