c++中c_str()的用法示例
//標(biāo)準(zhǔn)庫(kù)的string類(lèi)提供了三個(gè)成員函數(shù)來(lái)從一個(gè)string得到c類(lèi)型的字符數(shù)組 //主要介紹c_str //c_str():生成一個(gè)const char*指針,指向以空字符終止的數(shù)組。 //這個(gè)數(shù)組應(yīng)該是string類(lèi)內(nèi)部的數(shù)組 #include <iostream> //需要包含cstring的字符串 #include <cstring> using namespace std; int main() { //string-->char* //c_str()函數(shù)返回一個(gè)指向正規(guī)C字符串的指針, 內(nèi)容與本string串相同 //這個(gè)數(shù)組的數(shù)據(jù)是臨時(shí)的,當(dāng)有一個(gè)改變這些數(shù)據(jù)的成員函數(shù)被調(diào)用后,其中的數(shù)據(jù)就會(huì)失效。 //因此要么現(xiàn)用先轉(zhuǎn)換,要么把它的數(shù)據(jù)復(fù)制到用戶自己可以管理的內(nèi)存中 const char *c; string s = "1234"; c = s.c_str(); cout<<c<<endl; s = "abcde"; cout<<c<<endl; }
結(jié)果是:
上面如果繼續(xù)用c指針的話,導(dǎo)致的錯(cuò)誤將是不可想象的。就如:1234變?yōu)閍bcde
其實(shí)上面的c = s.c_str(); 不是一個(gè)好習(xí)慣。既然c指針指向的內(nèi)容容易失效,我們就應(yīng)該按照上面的方法,那怎么把數(shù)據(jù)復(fù)制出來(lái)呢?這就要用到strcpy等函數(shù)(推薦)。
//標(biāo)準(zhǔn)庫(kù)的string類(lèi)提供了三個(gè)成員函數(shù)來(lái)從一個(gè)string得到c類(lèi)型的字符數(shù)組 //主要介紹c_str //c_str():生成一個(gè)const char*指針,指向以空字符終止的數(shù)組。 //這個(gè)數(shù)組應(yīng)該是string類(lèi)內(nèi)部的數(shù)組 #include <iostream> //需要包含cstring的字符串 #include <cstring> using namespace std; int main() { //更好的方法是將string數(shù)組中的內(nèi)容復(fù)制出來(lái) 所以會(huì)用到strcpy()這個(gè)函數(shù) char *c = new char[20]; string s = "1234"; // c_str()返回一個(gè)客戶程序可讀不可改的指向字符數(shù)組的指針,不需要手動(dòng)釋放或刪除這個(gè)指針。 strcpy(c,s.c_str()); cout<<c<<endl; s = "abcd"; cout<<c<<endl; }
以上就是c++中c_str()的用法示例的詳細(xì)內(nèi)容,更多關(guān)于c++ c_str()的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
探討:C++實(shí)現(xiàn)鏈?zhǔn)蕉鏄?shù)(用非遞歸方式先序,中序,后序遍歷二叉樹(shù))
本篇文章是對(duì)用C++實(shí)現(xiàn)鏈?zhǔn)蕉鏄?shù)(用非遞歸方式先序,中序,后序遍歷二叉樹(shù))的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語(yǔ)言實(shí)現(xiàn)繪制南丁格爾玫瑰圖的示例代碼
玫瑰圖中有一種不等半徑的統(tǒng)計(jì)圖稱為南丁格爾玫瑰圖,網(wǎng)上很熱門(mén),是一很有藝術(shù)感的漂亮的統(tǒng)計(jì)圖,下面我們就來(lái)看看如何使用C語(yǔ)言繪制它吧2024-03-03c++容器list、vector、map、set區(qū)別與用法詳解
這篇文章主要介紹了c++容器list、vector、map、set區(qū)別與用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向深扒
這篇文章主要介紹了C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向,整個(gè)Cartographer源碼閱讀是很枯燥的, 但絕對(duì)是可以學(xué)到東西的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-03-03C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單五子棋小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08C++11系列學(xué)習(xí)之可調(diào)用對(duì)象包裝器和綁定器
這篇文章主要介紹了C++11系列學(xué)習(xí)之可調(diào)用對(duì)象包裝器和綁定器,下文基于C++的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04