【STL】string中c_str()、data()函數的用法

來源:互聯網
上載者:User

標準庫的string類提供了3個成員函數來從一個string得到c類型的字元數組:c_str()、data()、copy(p,n)。
1. c_str():產生一個const char*指標,指向以Null 字元終止的數組。註:
①這個數組的資料是臨時的,當有一個改變這些資料的成員函數被調用後,其中的資料就會失效。因此要麼現用先轉換,要麼把它的資料複製到使用者自己可以管理的記憶體中。注意。看下例:

const char* c;std::string s = "1234";c = s.c_str();std::cout << c << std::endl; //輸出:1234s = "abcd";std::cout << c << std::endl; //輸出:abcd

上面如果繼續用c指標的話,導致的錯誤將是不可想象的。就如:1234變為abcd
其實上面的c = s.c_str(); 不是一個好習慣。既然c指標指向的內容容易失效,我們就應該按照上面的方法,那怎麼把資料複製出來呢?這就要用到strcpy, strcpy_s等函數(推薦)。

char* c = new char;std::string s = "1234";// c = s.c_str();strcpy_s(c, s.size() + 1, s.c_str());std::cout << c << std::endl; //輸出:1234s = "abcd";std::cout << c << std::endl; //輸出:1234

注意:不能再像上面一樣①所示了,const還怎麼向裡面寫入值啊;也不能②所示,使用了未初始化的局部變數“c”,運行會出錯的 。
② c_str()返回一個客戶程式可讀不可改的指向字元數組的指標,不需要手動釋放或刪除這個指標。指標的生命週期與string一致。
2. data():與c_str()類似,但是返回的數組不以Null 字元終止。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.