簡體   English   中英

std :: string :: substr拋出std :: out_of_range但參數是限制的

[英]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的位置。

substr(29,36);

將嘗試獲取從第29位開始並且大小為36個字符的字符串。 不幸的是29 + 36> 41

文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM