我有一个字符串向量:
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
知道会发生什么事吗?
答案 0 :(得分:11)
请参阅std::string::substr
reference。第二个参数是子字符串的长度,不是子字符串后面字符的位置,因此结果是尝试访问超出范围的元素 - {{1抛出。
std::out_of_range
这个错误没有显现出来,因为子字符串的大小和位置都超过了28。
答案 1 :(得分:7)