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