關於string的成員函式substr
第一個引數表示在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的成員函式substr
這個函式的原型是substr(size_type off,size_type count)第一個引數表示在string的char陣列中的偏移量,count是從這個偏移的位置開始,字串的長度。這兩個引數的錯誤使用將導致程式crash或者獲得錯誤的結果。主要兩種錯誤情況,off大
C++ string成員函式和cstring庫函式
首先是C字串: C 庫函式 - strcmp() 比較2個C字串的字典序大小 描述 C 庫函式 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字
string 類操作的過載實現及其提供的其他常用成員函式
目錄 1,string 類操作的過載實現 2,String類提供的其他常用成員函式 @ 1,string 類操作的過載實現 /* string 類操作的過載實現 */ class CMyString { public: CMyString(char *ptr = NULL)
String類操作的過載實現及String類常用成員函式
文章目錄 1,string 類操作的過載實現 2,String類提供的其他常用成員函式 1,string 類操作的過載實現 /* string 類操作的過載實現 */ class CMyStrin
整理:CString類的完美總結&&CString 成員函式用法大全&&string 與 CString 轉化&& 和的區別
CString類的完美總結: ①、CString 類物件的初始化: CString str; CString str1(_T("abc")); CString str2 = _T("defg"); TCHAR szBuf[] = _T("kkk"); CStri
C++ stl---string類裡常用的成員函式
string類的建構函式: string(const char *s); //用c字串s初始化string(int n,char c); //用n個字元c初始化 此外,string類還支援預設建構函式和複製建構函式,如string s1;string s2="hello";都是正確的寫法。當
C++ string類的一些成員函式
string &replace(int p0, int n0,const char *s);//刪除從p0開始的n0個字元,然後在p0處插入串sstring &replace(int p0, int n0,const char *s, int n);//刪除p0開始的n0個字元,然後在p0處插
C++ string 類 部分成員函式實現(實現COW copy-on-write)
雖然標題中說實現了COW,但是事實上是很浪費的,並且命名也很不標準,程式碼也非常小學生,畢竟初學(給自己找藉口.jpg),以後應該還會把這篇找出來認真修改一下的。 Mystring.h: #pragma once #ifndef _MYSTRING_H_ #define
C++:如何判斷類中是否存在特定的成員函式?
在模板開發中有時需要判斷一個類中是否含特定的方法,然後根據判斷結果開分支,編寫不同的邏輯。下面就介紹一下最常用的一種方式: template <typename U> struct class_str {
vector成員函式
//用下標插入與刪除 v.insert(lower_bound(v.begin(),v.end(),b),b)//向量v找到b的最小位置再插入b v.insert(upper_bound(v.begin(),v.end(),b),b)//向量v找到b的最大位置再插入b v.erase(lower_bou
C++過載(2):通過成員函式和友元函式過載
分別通過成員函式和友元函式完成過載 #include <iostream> using namespace std; class Complex { public: Complex(double real =0,double imag=0):real(real),imag(i
成員函式的過載、覆蓋與隱藏(詳細)【轉】
(轉自:https://blog.csdn.net/weixin_42205987/article/details/81569744) 成員函式的過載、覆蓋與隱藏 成員函式的過載(overload)、覆蓋/重寫(override)與隱藏/重定義(hide)很容易混淆,C++程式設計師必須要搞
成員函式返回的是物件和引用的區別
我們發現,在C++中,有些成員函式返回的是物件,而有些函式返回的又是引用。 返回物件和返回引用的最主要的區別就是函式原型和函式頭。 Car run(const Car &) //返回物件 Ca
關於Qt新增成員函式的問題
如題,最近需要用Qt,裝了QtCreator,不知道怎麼新增成員函式, , 就是類似於VC這種對著類 點右鍵 然後新增函式這樣的快捷操作,在Qt上找了半天也沒找到,截圖裡那個求和函式是我純手動新增的,就想問下,Qt裡是怎麼加函式的
4、【C++】靜態成員變數/靜態成員函式/行內函數/友元函式/友元類/友元成員函式
一、靜態成員 我們可以使用 static 關鍵字來把類成員定義為靜態的。當我們宣告類的成員為靜態時,這意味著無論建立多少個類的物件,靜態成員都只有一個副本。 靜態成員在類的所有物件中是共享的。如果不存在其他的初始化語句,在建立第一個物件時,所有的靜態資料都會被初始化為
beginthreadex()函式在建立多執行緒傳入回撥函式時,好像只能傳入全域性函式或類的靜態成員函式,請問能不能傳入類的成員函式呢(非靜態)?
C++類成員函式直接作為執行緒回撥函式2009年06月01日 星期一 17:01我以前寫執行緒時要麼老老實實照著宣告寫,要麼使用C++類的靜態成員函式來作為回撥函式,經常會因為執行緒程式碼而破壞封裝.之前雖然知道類成員函式的展開形式,但從沒想過利用過它,昨天看深入ATL時無意中學
c++學習筆記之成員函式
學了c++才知道什麼是面向物件什麼是面向過程。幼稚的我曾經還覺得c++和C語言差不多,接觸之後才知道c++是多麼的難,光類和物件這個知識點就看了一天。什麼建構函式解構函式,物件陣列物件成員弄得我頭大,現在才知道為什麼老師說c++是最難的語言,學c++就是在地獄裡磨鍊,從地獄出來就是天堂,會有會當凌絕
C++中一個類訪問另外一個類的成員變數或者成員函式
1.在一個類中定義另外一個類的成員為指標型別。並用this指標管理物件的記憶體,實現資料的傳遞。 #include <stdio.h> class A { public: A(); ~A(); void SetData(int year, int month, int day);
C++筆記 第二十六課 類的靜態成員函式---狄泰學院
如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。 學習C++編譯環境:Linux 第二十六課 類的靜態成員函式 1.未完成的需求 統計在程式執行期間某個類的物件數目 保證程式的安全性(不能使用全域性變數) 隨時可以獲取當前物件的數目(Failure)
CMainFrame類的四個成員函式
框架類CMainFrame的四個成員函式為:AssertValid()和Dump(),OnCreate()和PreCreateWindow(). (1)AssertValid()用來診斷CMainFrame物件是否有效 (2)Dump()用來輸出CMainFrame物件的狀態資訊。