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

VS中C++报错‘Expression: string subscript out of range’求助

问题根源与修复方案:C++加密程序触发“string subscript out of range”错误

问题原因

错误的核心是**encrypted_message初始为空字符串,未分配足够存储空间**:

  • 空字符串长度为0,不存在任何下标对应的元素;
  • 循环中直接通过encrypted_message[i]赋值时,i的取值范围是0到secret_message.length()-1,超出了空字符串的有效下标范围,触发下标越界异常;
  • 循环条件i >= 0 && i < secret_message.length()本身无问题,问题出在对空字符串的下标操作上。

修复方案

有两种简单有效的修复方式:

方式一:提前为encrypted_message分配空间

在读取secret_message之后,调用resize()方法为encrypted_message分配与原消息相同长度的空间,确保每个下标位置都有对应的元素:

getline(cin, secret_message);
// 新增:分配与原消息等长的空间
encrypted_message.resize(secret_message.length());

方式二:使用push_back()追加字符

放弃下标赋值,改用push_back()方法将处理后的字符逐个追加到encrypted_message末尾,无需提前分配空间:
修改循环内的代码为:

if (isalpha(secret_message[i])) {
    size_t pos = alphabet.find(secret_message[i]);
    encrypted_message.push_back(key[pos]);
} else {
    encrypted_message.push_back(secret_message[i]);
}

完整修复代码示例(方式一)

#include <iostream>
#include <string>
using namespace std;

int main() {

    string alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string key = "XZNLWEBGJHQDYVTKFUOMPCIASRxznlwebgjhqdyvtkfuompciasr";

    string secret_message;
    string encrypted_message;
    string decrypted_message;

    cout << "What message would you like to encrypt?" << endl << endl;

    getline(cin, secret_message);
    encrypted_message.resize(secret_message.length());

    for (int i{ 0 }; i < secret_message.length(); i++) {

        if (isalpha(secret_message[i])) {
            size_t pos = alphabet.find(secret_message[i]);
            encrypted_message[i] = key[pos];
        }

        else {
            encrypted_message[i] = secret_message[i];
        }
    }

    cout << "Encrypting message...." << endl << "Encrypted Message: " << encrypted_message << endl << endl;

}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:30:44