c++中c_str()的用法詳解


//標准庫的string類提供了三個成員函數來從一個string得到c類型的字符數組 //主要介紹c_str //c_str():生成一個const char*指針,指向以空字符終止的數組。 //這個數組應該是string類內部的數組
#include <iostream>
//需要包含cstring的字符串
#include <cstring>
using namespace std; int main() { //string-->char* //c_str()函數返回一個指向正規C字符串的指針, 內容與本string串相同 //這個數組的數據是臨時的,當有一個改變這些數據的成員函數被調用后,其中的數據就會失效。 //因此要么現用先轉換,要么把它的數據復制到用戶自己可以管理的內存中
    const char *c; string s = "1234"; c = s.c_str(); cout<<c<<endl; s = "abcde"; cout<<c<<endl; }

結果是:

 

 上面如果繼續用c指針的話,導致的錯誤將是不可想象的。就如:1234變為abcde

其實上面的c = s.c_str(); 不是一個好習慣。既然c指針指向的內容容易失效,我們就應該按照上面的方法,那怎么把數據復制出來呢?這就要用到strcpy等函數(推薦)。

 

//標准庫的string類提供了三個成員函數來從一個string得到c類型的字符數組
//主要介紹c_str
//c_str():生成一個const char*指針,指向以空字符終止的數組。
//這個數組應該是string類內部的數組
#include <iostream>
//需要包含cstring的字符串
#include <cstring>
using namespace std;
 
int main()
{
    //更好的方法是將string數組中的內容復制出來 所以會用到strcpy()這個函數
    char *c = new char[20];
    string s = "1234";
    // c_str()返回一個客戶程序可讀不可改的指向字符數組的指針,不需要手動釋放或刪除這個指針。
    strcpy(c,s.c_str());
    cout<<c<<endl;
    s = "abcd";
    cout<<c<<endl;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM