You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio运行C++敏感词替换代码提示string subscript out of range错误

报错原因

核心问题是bleep函数存在字符串下标越界访问:

  • 外层循环中i的遍历范围是0到text.size()-1,当i的取值满足i + word.size() > text.size()时,内层循环访问text[i + j](j最大为word.size()-1)会超出字符串的合法下标范围,属于C++标准中的未定义行为。
  • Codecademy内置编辑器默认关闭了STL容器的边界安全检查,越界访问碰巧没有触发崩溃;Visual Studio默认开启了STL安全断言机制,会直接捕获到非法访问行为并抛出string subscript out of range提示。
修复方法

调整bleep函数的外层循环终止条件,确保i的最大取值不会让后续的字符匹配访问到越界位置即可,同时增加待过滤词长度大于原句长度的兜底判断,避免无符号数运算异常:

void bleep(std::string word, std::string &text) {
    // 待过滤词比原句子长,不可能匹配,直接返回
    if (word.size() > text.size()) {
        return;
    }
    // 调整循环终止条件,保证i + word.size()不超过text总长度
    for (int i = 0; i <= text.size() - word.size(); i++) {
        int match = 0;
        for (int j = 0; j < word.size(); j++) {
            if (text[i + j] == word[j]) {
                match++;
            }       
        }
        if (match == word.size()) {
            asterisk(word, text, i);
        }
    }
}

修改后即可在Visual Studio中正常运行,逻辑和原需求完全一致。

内容的提问来源于stack exchange,提问作者George_H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:24:05