【C++】18.char[] 与 string 的区别 与 互相转化、c_str() 函数用法
原文鏈接:https://blog.csdn.net/weixin_43273685/article/details/101836630
注意:原文中有一些錯(cuò)誤,我這里做了修改。
char*與string的本質(zhì)區(qū)別是:
string是一個(gè)容器,c++中封裝了一個(gè)string類(lèi),功能極其強(qiáng)大,而char*則是一個(gè)指針,指向一個(gè)數(shù)組的首地址。
1. char []或者char*向string轉(zhuǎn)換
char*向string轉(zhuǎn)換支持隱式類(lèi)型轉(zhuǎn)換,即:
// 方法1: char c[] = {'1','2','a'}; // @zhz:推薦寫(xiě)成 char c[] ="12a"; std::string str1 = c ;// 方法2 // char* p = "abc"; //"warning: ISO C++ forbids converting a string constant to ‘char*’ " char* p = (char*)"abc"; //OK,加上類(lèi)型轉(zhuǎn)換就沒(méi)有警告了 char const *p="abc";//OK// 可通過(guò)std::string(ch[0])獲取到"aaa",std::string(ch[1])獲取到"bbb". char *ch[] = {"aaa","bbb"}; std::string str2=std::string(ch[0]);注意區(qū)分to_string()函數(shù)的用法,不要混淆。
他的功能是 將數(shù)值轉(zhuǎn)化為字符串。返回對(duì)應(yīng)的字符串。
函數(shù)原型:
2. string轉(zhuǎn)char*
而string轉(zhuǎn)char*一般需要用到一個(gè)c_str()函數(shù);
std::string str2("456"); const char* ch = str2.c_str(); //@zhz:必須加上const,否則會(huì)報(bào)錯(cuò):不能把 const char*類(lèi)型賦值給 char *3. c_str()函數(shù)用法
原文鏈接: http://blog.csdn.net/Nancy_m/article/details/7583550
語(yǔ)法:
const char *c_str();
c_str()函數(shù)返回值: 返回一個(gè)指向正規(guī)C字符串的指針常量, 內(nèi)容與本string串相同.
這是為了與c語(yǔ)言兼容,在c語(yǔ)言中沒(méi)有string類(lèi)型,故必須通過(guò)string類(lèi)對(duì)象的成員函數(shù)c_str()把string對(duì)象轉(zhuǎn)換成c中的字符串樣式。
注意:一定要使用strcpy()函數(shù) 等來(lái)操作方法c_str()返回的指針
下面這種方式會(huì)出錯(cuò):
// @zhz:錯(cuò)誤用法 char* c; std::string s="1234"; c = s.c_str(); //出錯(cuò),不能把 const char*類(lèi)型賦值給 char *上面c最后指向的內(nèi)容是垃圾,因?yàn)閟對(duì)象被析構(gòu),其內(nèi)容被處理,同時(shí),編譯器也將報(bào)錯(cuò):將一個(gè)const char *賦與一個(gè)char *。
應(yīng)該這樣用:
//正確用法 char c[20]; //@zhz:注意,不要寫(xiě)成 char *c; std::string s="1234"; strcpy(c,s.c_str());這樣才不會(huì)出錯(cuò), c_str()返回的是一個(gè)臨時(shí)指針const char *,不能對(duì)其進(jìn)行操作
再舉個(gè)例子:
c_str() 以 char*形式傳回 string 內(nèi)含字符串
如果一個(gè)函數(shù)要求char*參數(shù),可以使用c_str()方法:
4. @zhz:下面是我自己測(cè)試的代碼:
// char *c = "asd"; // 不推薦,會(huì)出現(xiàn) "warning: ISO C++ forbids converting a string constant to ‘char*’ " char *c = (char*)"asd"; //推薦 // char c[] = {'1', '2', '3'}; // 注意有引號(hào),不能寫(xiě)成 char c[] = {1,2,3};,否則cout打印會(huì)出現(xiàn)亂碼 // char *c[] = {"aaa","bbb"}; // 可通過(guò)std::string(c[0])獲取到"aaa",std::string(c[1])獲取到"bbb". // char c[] = {'a','b'}; // 不推薦這種方式, 否則當(dāng)只有兩個(gè)字符時(shí),使用std::cout << "str1= " << str1 << std::endl;會(huì)多打印出一個(gè)@符號(hào) char c[] = "ab"; // 推薦這種方式 printf("%s\n", c); //c語(yǔ)言方式打印字符串?dāng)?shù)組c[]std::string str1 = c;// 1.下面使用c語(yǔ)言方式printf()函數(shù)打印string字符串,需要 #include <string.h> printf("str1= %s\n",str1.c_str());// 2.下面使用c++方式std::cout打印string字符串 std::cout << "str1= " << str1 << std::endl;strcpy
char ch[20]; //注意,不要寫(xiě)成 char *ch; std::string s="1234"; strcpy(ch,s.c_str()); // 注意,如果寫(xiě)成 printf("%c", ch);會(huì)有警告"warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘char*’ " printf("%s", ch);總結(jié)
以上是生活随笔為你收集整理的【C++】18.char[] 与 string 的区别 与 互相转化、c_str() 函数用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【C++】33.二级指针 **p
- 下一篇: 【C++】19. 深入 char * ,