關於string的成員函式substr

2022-07-30 08:51:10 字數 787 閱讀 6116

在lksnapshot.cpp中解析接收串列埠的字串時有一句:

string cmd = msg.substr(cmdstr.length()+1,cmdstr.length()-cmdstr.length()-1);

懷疑substr的引數寫錯了,然後查到相關資料,發現當長度大於字串的長度或者小於0時,其預設至字串末尾,因此該行語句能正常工作。

具體的說法如下:

這個函式的原型是substr(size_type off,size_type count)

第乙個引數表示在string的char陣列中的偏移量,count是從這個偏移的位置開始,字串的長度。

這兩個引數的錯誤使用將導致程式crash或者獲得錯誤的結果。

主要兩種錯誤情況,off大於陣列的長度或者小於0,和count大於字串的長度或者count小於0

對於off的錯誤,當其大於陣列的長度是,即是陣列越界錯誤,程式crash。

當提供的off小於0時,由於引數型別為unsigned int,所以將做強制轉化,off變為乙個很大的整數,因而還是導致越界錯誤,程式crash。

對於count的錯誤,當 count + off大於陣列的長度時,substr內部會先判斷是否其超過陣列的長度,如果超過,其將按照陣列的最大下標處理。因而其等同於substr(off,string.size()-off);

同理,當count小於0時,其將轉化為乙個很大的整數,結果還是等同於substr(off,string.size()-off);

綜上,在使用該函式時,一定要注意傳入的引數,以防止程式crash,或者獲得錯誤的結果。

string 成員函式

c string函式列表 c string c string所有的成員函式 begin 得到指向字串開頭的iterator end 得到指向字串結尾的iterator rbegin 得到指向反向字串開頭的iterator rend 得到指向反向字串結尾的iterator size 得到字串的大小 l...

String成員函式

string類提供的各種操作函式大致分為八類 構造器和析構器,大小和容量,元素訪問,字串比較,字串修改,字串接合,i o操作以及搜尋和查詢。函式名稱 功能 建構函式 產生或複製字串 析構函式 銷毀字串 assign 賦以新值 swap 交換兩個字串的內容 insert 插入字元 erase 刪除字元...

關於 const 成員函式

成員函式如果是const意味著什麼?有兩個流行概念 物理常量性和邏輯常量性。c 對常量性的定義採用的是物理常量性概念,即const 成員函式不可以更改物件內任何non static成員變數。例如 1 class ctextblock2 1213 std size t ctextblock lengt...