1. 程式人生 > >C++中const char*, string 與char*的轉化

C++中const char*, string 與char*的轉化

1:string轉化成const char*

可以通過呼叫string類中的c_str函式實現string向const char*的轉換

//string與const char*轉換
string s = "string_To_const char* ";
const char *c_s=s.c_str();
const char *c_ss = s.data();

還可以直接使用string類中的data()函式,直接對const char *賦值

但是c_s並不是不變的,如果在之後改變了s的內容,c_s仍然會隨著改變,這樣就會造成不可彌補的錯誤!所以需要重新定義變數開記憶體管理c_s指標;

2:const char*轉換成string

利用string的一個建構函式對string類的物件賦值即可

//const char*轉換string
const char* p = "const char* _To_string";
string y(p);

3:string與char*的轉換

string不能直接轉換為char*,需要通過其他的方法來實現,現在簡單介紹幾種方法:

1:通過函式strcpy來實現;

//string與char*的轉換
string ppp = "stringTochar*";
char* c;
const int len = ppp.length();
c=new char[len+1];
strcpy(c,ppp.c_str());
這裡需要注意:1):給char* c分配記憶體空間時需要length()+1,因為字元指標c最後有一個‘\0’結尾;2):使用strcpy函式時系統會報錯,在專案屬性->C\C++前處理器->前處理器定義裡面加入_CRT_SECURE_NO_WARNINGS; 2:通過copy函式實現:
string ppp = "stringTochar*";
char *d;
d=new char[len+1];
*(d+len)='\0';
ppp.copy(d,len,0);
這裡一定要加上第四句語句因為char* 最後有一個'\0',如果不進行賦值的話結果就會出現亂碼;
4:char*轉化成string
直接賦值即可:
//char*與string的轉換
char* pp = "stringTochar*";
string q(pp);

5:const char*轉化成char* 使用strcpy函式即可
//const char*轉化成char*
const char* csc = "constchar*Tochar*";
char* cc;
int length = strlen(csc);
cc = new char[length+1];
strcpy(cc,csc);
cout<<cc<<"   "<<csc<<endl;
下面給出程式碼和結果:
// string.cpp : 定義控制檯應用程式的入口點。
//

#include "stdafx.h"
#include<iostream>
#include<string>

#pragma warning(disable:4996)
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	//string與const char*轉換
	string s = "string_To_constchar*";
	const char *c_s=s.c_str();
	const char *c_ss = s.data();
	cout<<s<<"   "<<c_s<<"   "<<c_ss<<endl;

	//const char*轉換string
	const char* p = "constchar*_To_string";
	string y(p);
	cout<<p<<"   "<<y<<endl;

	//char*與string的轉換
	char* pp = "stringTochar*";
	string q(pp);
	cout<<pp<<"   "<<q<<endl;

	//string與char*的轉換
	string ppp = "stringTochar*";
	char* c;
	const int len = ppp.length();
	c=new char[len+1];
	strcpy(c,ppp.c_str());

	char *d;
	d=new char[len+1];
	*(d+len)='\0';
	ppp.copy(d,len,0);
	cout<<ppp<<"   "<<c<<"   "<<d<<endl;

	//const char*轉化成char*
	const char* csc = "constchar*Tochar*";
	char* cc;
	int length = strlen(csc);
	cc = new char[length+1];
	strcpy(cc,csc);
	cout<<cc<<"   "<<csc<<endl;

	cin.get();
	cin.get();
	return 0;
}
執行結果: