[英]'std::out_of_range' what(): basic_string::substr: __pos
[英]std::string::substr throws std::out_of_range but the arguments are in limit
我有一個字符串向量:
vector<string> tokenTotals;
當調用push_back
,存儲一個長度為41的字符串,我必須對向量的每個元素進行操作並獲得兩個子字符串,第一個在0到28范圍內,第二個在29到36范圍內:
for(int i = 0; i < tokenTotals.size(); i++)
{
size_t pos = tokenTotals[i].find(": ");
cout << tokenTotals[i] << endl; // Show all strings - OK
cout << tokenTotals[i].length() << endl; // Lenght: 41
string first = tokenTotals[i].substr(0, 28); // OK
string second = tokenTotals[i].substr(29, 36); // ERROR
cout << first << " * " << second << endl;
}
但是當我嘗試獲取第二個子字符串時,我收到以下錯誤:
terminate called after throwing an instance of std::out_of_range.
what():: basic_string::substr
知道會發生什么事嗎?
請參閱std::string::substr
引用 。 第二個參數是子字符串的長度 , 而不是子字符串后字符的位置 ,因此結果是嘗試訪問超出范圍的元素 - 拋出std::out_of_range
。
使用tokenTotals[i].substr(0, 28)
這個錯誤不會顯現出來,因為子字符串既有大小又有一個位於結尾28的位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.