c++中c_str()的用法示例
更新時間:2020年09月27日 10:41:22 作者:chuyaoxin
這篇文章主要介紹了c++中c_str()的用法示例,幫助大家更好的理解和學習C++,感興趣的朋友可以了解下
//標準庫的string類提供了三個成員函數(shù)來從一個string得到c類型的字符數(shù)組 //主要介紹c_str //c_str():生成一個const char*指針,指向以空字符終止的數(shù)組。 //這個數(shù)組應該是string類內(nèi)部的數(shù)組 #include <iostream> //需要包含cstring的字符串 #include <cstring> using namespace std; int main() { //string-->char* //c_str()函數(shù)返回一個指向正規(guī)C字符串的指針, 內(nèi)容與本string串相同 //這個數(shù)組的數(shù)據(jù)是臨時的,當有一個改變這些數(shù)據(jù)的成員函數(shù)被調(diào)用后,其中的數(shù)據(jù)就會失效。 //因此要么現(xiàn)用先轉換,要么把它的數(shù)據(jù)復制到用戶自己可以管理的內(nèi)存中 const char *c; string s = "1234"; c = s.c_str(); cout<<c<<endl; s = "abcde"; cout<<c<<endl; }
結果是:
上面如果繼續(xù)用c指針的話,導致的錯誤將是不可想象的。就如:1234變?yōu)閍bcde
其實上面的c = s.c_str(); 不是一個好習慣。既然c指針指向的內(nèi)容容易失效,我們就應該按照上面的方法,那怎么把數(shù)據(jù)復制出來呢?這就要用到strcpy等函數(shù)(推薦)。
//標準庫的string類提供了三個成員函數(shù)來從一個string得到c類型的字符數(shù)組 //主要介紹c_str //c_str():生成一個const char*指針,指向以空字符終止的數(shù)組。 //這個數(shù)組應該是string類內(nèi)部的數(shù)組 #include <iostream> //需要包含cstring的字符串 #include <cstring> using namespace std; int main() { //更好的方法是將string數(shù)組中的內(nèi)容復制出來 所以會用到strcpy()這個函數(shù) char *c = new char[20]; string s = "1234"; // c_str()返回一個客戶程序可讀不可改的指向字符數(shù)組的指針,不需要手動釋放或刪除這個指針。 strcpy(c,s.c_str()); cout<<c<<endl; s = "abcd"; cout<<c<<endl; }
以上就是c++中c_str()的用法示例的詳細內(nèi)容,更多關于c++ c_str()的資料請關注腳本之家其它相關文章!
相關文章
探討:C++實現(xiàn)鏈式二叉樹(用非遞歸方式先序,中序,后序遍歷二叉樹)
本篇文章是對用C++實現(xiàn)鏈式二叉樹(用非遞歸方式先序,中序,后序遍歷二叉樹)的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05c++容器list、vector、map、set區(qū)別與用法詳解
這篇文章主要介紹了c++容器list、vector、map、set區(qū)別與用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05C++ Cartographer源碼中關于Sensor的數(shù)據(jù)走向深扒
這篇文章主要介紹了C++ Cartographer源碼中關于Sensor的數(shù)據(jù)走向,整個Cartographer源碼閱讀是很枯燥的, 但絕對是可以學到東西的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-03-03