string類c str data與 0使用

2021-06-28 18:37:11 字數 748 閱讀 9655

以前一直使用string::data()函式沒發現什麼問題,前天居然發現string::data不能用了,也就是data()返回沒有結束符,導致拷貝崩潰,後來一查,這個data函式返回是不一定會包含結束符的。寫本文專門寫了個測試程式去復現,測試程式卻又帶\0結束符返回,編譯器什麼都沒換過(指教)。

不過不管怎樣,還是使用c_str()保險,對涉及中間帶\0的string,使用data()時,注意結合len來進行安全限定。

這是:說法,而天緣實際測試,這個data函式還是有\0新增返回的。測試程式如下:

#include #include using namespace std;

bool fun(string x)

void main()

但確實也遇到過沒有結束符返回的情況,好像內容很長時(函式引用?...),當時就因為沒有結束符導致拷貝崩潰。後來全部換成c_str()了。

具體參考:

有多種方法可實現中間帶結束符\0的string物件初始化。但是像:

string s="123 \0 123";

s5="abc\0";

s5+="def\0";

這樣的初始化方法都是不行的,因為編譯器或執行時預設都會截掉結束符後面的字串。結果就是:

s="123 "

s5="abcdef"

string s5= string("12345 \0 54321", 13);
這樣的方式初始化,這時 s5="12345 \0 54321"

常用類 String類

string類概述 字串是由多個字元組成的一串資料 字串行 字串可以看成是字元陣列 構造方法 public string public string byte bytes public string byte bytes,int offset,int length public string cha...

擴充套件String類

因為.net framework中的string類是封閉的,所以我們不能從它進行派生來擴充套件它的功能。雖然string類已經提供了很多有用的方法來讓我們進行字串的處理和操作,但是有時候一些特殊的的要求還是不能能到滿足。乙個例子就是 假如有乙個因為句子,比如 how are you 我們需要把每個單...

String 類的實現(3)String類常用函式

1 2 include3 include4 include5 include 6 using namespace std 自己模擬實現的部分相關c string庫函式 8int my strlen const char p 9 17return count 18 19char my strcopy ...