c ++表达式:字符串下标超出范围

时间:2013-04-15 13:25:15

标签: c++ expression

当我尝试调试代码时,它会遇到调试错误“c ++ Expression:string subscript out of range” 很确定在调用setCode()时遇到了问题。 如何修复setCode()中的代码?

#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
#include <list>
using namespace std;

class test
{
    private:
        string code;
        int digit;

    public:
        //constructor
        test(): code(""), digit(0) { }

        //copy constructor
        test(const test &other):
        digit(other.digit)
        { 
            for(unsigned int i=0; i < code.length(); i++)   
                code[digit] = other.code[digit];
        }

        //set up the private values 
        void setCode(const string &temp, const int num);
        void setDigit(const int &num);

        //return the value of the pointer character 
        const string &getCode() const;
        const unsigned int getDigit() const;
};

const string& test::getCode() const
{
    return code;
}
const unsigned int test::getDigit() const
{
    return digit;
}
void test::setCode(const string &temp, int num) 
{
    code[num] = temp[num];  
}
void test::setDigit(const int &num)
{
    digit = num;
}


int main()
{
    string contents = "dfskr-123";

    test aisbn;
    list<test> simul;
    list<test>::iterator testitr;
    testitr = simul.begin();
    int count = 0;

    cout << contents << '\n';
    aisbn.setCode(contents, count);
    aisbn.setDigit(count);
    simul.push_back(aisbn);
    count++;

    /*for(; testitr !=simul.end(); simul++)
    {
        cout << testitr->getCode() << "\n";
    }*/

}

2 个答案:

答案 0 :(得分:2)

当您创建test类的实例时,其中的字符串为空。这意味着每当你这样做时, code[something]你将超出范围。索引是什么并不重要。

您需要从一开始就将字符串设置为特定长度,并确保索引在该范围内。或者通过在需要时动态扩展字符串来确保索引在范围内。

答案 1 :(得分:1)

您必须确保执行此语句时:

 code[num] = temp[num];  

codetemp的尺寸至少为num + 1