std::string中data()和c_str()的區別


data和c_str

data()c_str()都是用來獲取底層字符串的首地址的,但是在C++98中規定的是data()返回的字符串不保證有結尾\0,但是c_str()返回的字符串保證有結尾\0,也就是C++98標准在設計字符串的時候是想拋棄C風格的字符串語法的,但是在實際應用中,往往需要將C++的string轉換為C風格的字符串const char*
這一點平常使用的時候沒問題,但如果想直接通過C風格的接口修改string中的內容就麻煩了,因為&str[0]返回的字符串並不保證有結尾'\0':

std::string str = "hello";
// 在C++98中是未定義行為
auto p = &str[0]

好在C++11標准中意識到了這一點,規定string底層存儲的字符串直接采用C風格的字符串語法,所以data()c_str()就變成了同義詞了:

std::string str = "hello";
// 在C++11中是正確的,p指向一個空字符串
auto p = &str[0]


免責聲明!

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



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