阅读量:76
当使用string.substr对字符串进行子串提取时,如果索引越界会导致程序运行时出现未定义行为。为了避免这种情况,可以在提取子串之前先判断索引是否在有效范围内,可以使用std::min函数来确保索引不会超出字符串的长度。
以下是一个示例代码:
#include
#include
#include // for std::min
int main() {
std::string str = "Hello, World!";
int start = 6; // starting index
int length = 10; // number of characters to extract
// Check if start index is within string length
if(start >= 0 && start < str class="hljs-built_in">length()) {
// Calculate number of characters to extract without going out of bounds
length = std::min(length, static_cast<int>(str.length() - start));
std::string subStr = str.substr(start, length);
std::cout << "SubString: " << subStr class="hljs-keyword">else {
std::cout << "Invalid start index" << std class="hljs-keyword">return 0;
}
在上面的示例中,我们首先检查起始索引是否在字符串长度范围内,然后使用std::min函数计算要提取的字符数,确保不会超出字符串长度。这样可以避免string.substr索引越界的问题。