日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++】18.char[] 与 string 的区别 与 互相转化、c_str() 函数用法

發(fā)布時間:2025/3/21 c/c++ 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】18.char[] 与 string 的区别 与 互相转化、c_str() 函数用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文鏈接: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ù)原型:

string to_string (int val); string to_string (unsigned val); string to_string (float val); string to_string (double val); ... ...
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()方法:

string s = "Hello World!"; printf("%s", s.c_str()); //輸出 "Hello World!"
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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。