C++中const char*, string 与char*的转化

时间:2024-03-17 10:57:38

C++中const char*, string 与char*的转化

原文:https://blog.csdn.net/zhang_alongzd/article/details/52790905

1:string转化成const char*

可以通过调用string类中的c_str函数实现string向const char*的转换

[cpp] view plain copy
  1. //string与const char*转换  
  2. string s = "string_To_const char* ";  
  3. const char *c_s=s.c_str();  
[cpp] view plain copy
  1. const char *c_ss = s.data();  

还可以直接使用string类中的data()函数,直接对const char *赋值

但是c_s并不是不变的,如果在之后改变了s的内容,c_s仍然会随着改变,这样就会造成不可弥补的错误!所以需要重新定义变量开内存管理c_s指针;

2:const char*转换成string

利用string的一个构造函数对string类的对象赋值即可

[cpp] view plain copy
  1. //const char*转换string  
  2. const char* p = "const char* _To_string";  
  3. string y(p);  

3:string与char*的转换

string不能直接转换为char*,需要通过其他的方法来实现,现在简单介绍几种方法:

1:通过函数strcpy来实现;

[cpp] view plain copy
  1. //string与char*的转换  
  2. string ppp = "stringTochar*";  
  3. char* c;  
  4. const int len = ppp.length();  
  5. c=new char[len+1];  
  6. strcpy(c,ppp.c_str());  
这里需要注意:1):给char* c分配内存空间时需要length()+1,因为字符指针c最后有一个‘\0’结尾;2):使用strcpy函数时系统会报错,在项目属性->C\C++预处理器->预处理器定义里面加入_CRT_SECURE_NO_WARNINGS;

2:通过copy函数实现:
[cpp] view plain copy
  1. string ppp = "stringTochar*";  
  2. char *d;  
  3. d=new char[len+1];  
  4. *(d+len)='\0';  
  5. ppp.copy(d,len,0);  
这里一定要加上第四句语句因为char* 最后有一个'\0',如果不进行赋值的话结果就会出现乱码;

4:char*转化成string
直接赋值即可:
[cpp] view plain copy
  1. //char*与string的转换  
  2. char* pp = "stringTochar*";  
  3. string q(pp);  

5:const char*转化成char*
使用strcpy函数即可
[cpp] view plain copy
  1. //const char*转化成char*  
  2. const char* csc = "constchar*Tochar*";  
  3. char* cc;  
  4. int length = strlen(csc);  
  5. cc = new char[length+1];  
  6. strcpy(cc,csc);  
  7. cout<<cc<<"   "<<csc<<endl;  
下面给出代码和结果:
[cpp] view plain copy
  1. // string.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include<iostream>  
  6. #include<string>  
  7.   
  8. #pragma warning(disable:4996)  
  9. using namespace std;  
  10. int _tmain(int argc, _TCHAR* argv[])  
  11. {  
  12.     //string与const char*转换  
  13.     string s = "string_To_constchar*";  
  14.     const char *c_s=s.c_str();  
  15.     const char *c_ss = s.data();  
  16.     cout<<s<<"   "<<c_s<<"   "<<c_ss<<endl;  
  17.   
  18.     //const char*转换string  
  19.     const char* p = "constchar*_To_string";  
  20.     string y(p);  
  21.     cout<<p<<"   "<<y<<endl;  
  22.   
  23.     //char*与string的转换  
  24.     char* pp = "stringTochar*";  
  25.     string q(pp);  
  26.     cout<<pp<<"   "<<q<<endl;  
  27.   
  28.     //string与char*的转换  
  29.     string ppp = "stringTochar*";  
  30.     char* c;  
  31.     const int len = ppp.length();  
  32.     c=new char[len+1];  
  33.     strcpy(c,ppp.c_str());  
  34.   
  35.     char *d;  
  36.     d=new char[len+1];  
  37.     *(d+len)='\0';  
  38.     ppp.copy(d,len,0);  
  39.     cout<<ppp<<"   "<<c<<"   "<<d<<endl;  
  40.   
  41.     //const char*转化成char*  
  42.     const char* csc = "constchar*Tochar*";  
  43.     char* cc;  
  44.     int length = strlen(csc);  
  45.     cc = new char[length+1];  
  46.     strcpy(cc,csc);  
  47.     cout<<cc<<"   "<<csc<<endl;  
  48.   
  49.     cin.get();  
  50.     cin.get();  
  51.     return 0;  
  52. }  
运行结果:
C++中const char*, string 与char*的转化

1:string转化成const char*

可以通过调用string类中的c_str函数实现string向const char*的转换

[cpp] view plain copy
  1. //string与const char*转换  
  2. string s = "string_To_const char* ";  
  3. const char *c_s=s.c_str();  
[cpp] view plain copy
  1. const char *c_ss = s.data();  

还可以直接使用string类中的data()函数,直接对const char *赋值

但是c_s并不是不变的,如果在之后改变了s的内容,c_s仍然会随着改变,这样就会造成不可弥补的错误!所以需要重新定义变量开内存管理c_s指针;

2:const char*转换成string

利用string的一个构造函数对string类的对象赋值即可

[cpp] view plain copy
  1. //const char*转换string  
  2. const char* p = "const char* _To_string";  
  3. string y(p);  

3:string与char*的转换

string不能直接转换为char*,需要通过其他的方法来实现,现在简单介绍几种方法:

1:通过函数strcpy来实现;

[cpp] view plain copy
  1. //string与char*的转换  
  2. string ppp = "stringTochar*";  
  3. char* c;  
  4. const int len = ppp.length();  
  5. c=new char[len+1];  
  6. strcpy(c,ppp.c_str());  
这里需要注意:1):给char* c分配内存空间时需要length()+1,因为字符指针c最后有一个‘\0’结尾;2):使用strcpy函数时系统会报错,在项目属性->C\C++预处理器->预处理器定义里面加入_CRT_SECURE_NO_WARNINGS;

2:通过copy函数实现:
[cpp] view plain copy
  1. string ppp = "stringTochar*";  
  2. char *d;  
  3. d=new char[len+1];  
  4. *(d+len)='\0';  
  5. ppp.copy(d,len,0);  
这里一定要加上第四句语句因为char* 最后有一个'\0',如果不进行赋值的话结果就会出现乱码;

4:char*转化成string
直接赋值即可:
[cpp] view plain copy
  1. //char*与string的转换  
  2. char* pp = "stringTochar*";  
  3. string q(pp);  

5:const char*转化成char*
使用strcpy函数即可
[cpp] view plain copy
  1. //const char*转化成char*  
  2. const char* csc = "constchar*Tochar*";  
  3. char* cc;  
  4. int length = strlen(csc);  
  5. cc = new char[length+1];  
  6. strcpy(cc,csc);  
  7. cout<<cc<<"   "<<csc<<endl;  
下面给出代码和结果:
[cpp] view plain copy
  1. // string.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include<iostream>  
  6. #include<string>  
  7.   
  8. #pragma warning(disable:4996)  
  9. using namespace std;  
  10. int _tmain(int argc, _TCHAR* argv[])  
  11. {  
  12.     //string与const char*转换  
  13.     string s = "string_To_constchar*";  
  14.     const char *c_s=s.c_str();  
  15.     const char *c_ss = s.data();  
  16.     cout<<s<<"   "<<c_s<<"   "<<c_ss<<endl;  
  17.   
  18.     //const char*转换string  
  19.     const char* p = "constchar*_To_string";  
  20.     string y(p);  
  21.     cout<<p<<"   "<<y<<endl;  
  22.   
  23.     //char*与string的转换  
  24.     char* pp = "stringTochar*";  
  25.     string q(pp);  
  26.     cout<<pp<<"   "<<q<<endl;  
  27.   
  28.     //string与char*的转换  
  29.     string ppp = "stringTochar*";  
  30.     char* c;  
  31.     const int len = ppp.length();  
  32.     c=new char[len+1];  
  33.     strcpy(c,ppp.c_str());  
  34.   
  35.     char *d;  
  36.     d=new char[len+1];  
  37.     *(d+len)='\0';  
  38.     ppp.copy(d,len,0);  
  39.     cout<<ppp<<"   "<<c<<"   "<<d<<endl;  
  40.   
  41.     //const char*转化成char*  
  42.     const char* csc = "constchar*Tochar*";  
  43.     char* cc;  
  44.     int length = strlen(csc);  
  45.     cc = new char[length+1];  
  46.     strcpy(cc,csc);  
  47.     cout<<cc<<"   "<<csc<<endl;  
  48.   
  49.     cin.get();  
  50.     cin.get();  
  51.     return 0;  
  52. }  
运行结果:
C++中const char*, string 与char*的转化