visual C++ 字符串下标超出范围

visual C++ string subscript out of range

我遇到了“字符串下标超出范围”的错误。
经过测试,我很确定是因为这个函数,用于读取文件中的值,但不知道有什么问题:

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

string read(string value) {
    ifstream input;
    string line="", output="";
    size_t pos;
    bool a = true;
    int i = 0;
    input.open("pg_options.txt");
    if (!input.is_open()) {
        cout << "pg_options.txt missing.";
        return "error";
    }
    while (getline(input, line)) { //get file lines
        pos = line.find(value);
        if (pos == string::npos) { //if value in line
            while (a == true) {
                if (line[i] == '=') { //after "=" 
                    i++;
                    break;
                }
                else {
                    i++;
                }
            }
            for (i; line[i] != ' '; i++) {
                output += line[i]; //put value to output
            }
        }
    }
    input.close();
    return output;
}

pg_options.txt:

include_special_characters=true
include_upper_case=true
include_lower_case=true
include_numbers=true
digits=10

cout << read("digits")returns上面提到的错误

感谢您的评论。我通过编辑 for 循环解决了这个问题:

string read(string value) {
    ifstream input;
    int olength;
    string line = "", output = "";
    size_t pos;
    bool a = true;
    int i = 0;
    input.open("pg_options.txt");
    if (!input.is_open()) {
        cout << "pg_options.txt missing.";
        return "error";
    }
    while (getline(input, line)) {
        pos = line.find(value);
        if (pos != string::npos) {
            while (a == true) {
                if (line[i] == '=') {
                    i++;
                    break;
                }
                else {
                    i++;
                }
            }
            olength = line.length() - value.length() - 1;
            for (int i2 = 0; i2 < olength; i2++) {
                output += line[i];
                i++;
            }
        }
    }
    input.close();
    return output;
}