1. 程式人生 > >C風格字串和C++string物件的相互轉化

C風格字串和C++string物件的相互轉化

C風格的字串很容易轉化成C++風格的字串,反過來卻可能引起語法錯誤。 一、C風格的字串轉化為C++的string物件 C++中,string 類能夠自動將C 風格的字串轉換成string 物件  

int main() {

	//C風格字串定義方法
	char *c1 = "hello,world";
	char c2[] = "hello,world";

	//c風格字串能直接給string 賦值
	string s1 = c1;

	cout << c1 << '\n'
		<< c2 << '\n'
		<< s1 << '\n';

	cout << endl;
	system("pause");
}

二、C++的string物件轉化為C風格的字串 要實現這種轉化,需呼叫string類的c_str()方法  

#include <IOSTREAM>
#include <STRING>
using namespace std;
 
int main(){
	string str2("hello, world!");
	char *str = str2.c_str();
	cout << "C++風格:" << str2 <<endl;
	cout << "C風格:" << str <<endl;
 
	return 0;
}

結果報錯:cannot convert from 'const char *' to 'char *' 檢視一下c_str()的原始碼:const _E *c_str() const   {return (_Ptr == 0 ? _Nullstr() : _Ptr); }     再檢視_E:typedef char _E 這下全明白了。c_str()返回的是const char *型別。在第7行str的宣告前加上限定符const,一切就正常了。