C風格字串和C++string物件的相互轉化
阿新 • • 發佈:2018-12-21
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,一切就正常了。