输入输入时为什么会出错? “表达式:字符串下标超出范围”

时间:2013-12-10 00:23:39

标签: c++ string

当我尝试为Lorenzo解码机的实现输入输入时出错:

  

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

为什么?

我也加载了一个.dat文件,里面有引脚设置。

以下是我认为错误所在的部分,在我的代码中:

    string chi (string pinSettings, string code, int count)
    {

 if (count = 0)
 {
        chi1 = 0,;
 }

 compare1 = code[0];
 if (chi1 + 351 >= 391)
{
chi1 = 0;
}
compare2 = pinSettings[chi1 +351];

int result = (compare1 - '0') ^ (compare2 - '0');


compare1 = code[1];

if (chi2 + 392 >= 423)
{
    chi2 = 0;
}


chi1 ++;
chi2 ++;

string fPass;
fPass += (result+'0');
fPass += (result2+'0');

return fPass;
    }

    bool mu (string pinSettings, int count)
    {
char compare1;
char compare2;
static int mu61, mu37;

if (count = 0)
{
mu61 = 0, mu37 = 0;
}

if (mu61 + 290 >= 351)
{
mu61 = 0;
}

compare1 = pinSettings[mu61 +290];
int compareInt1 = (compare1 - '0');
mu61++;

if (compareInt1 == 1)
{
    mu37 ++;
    if (mu37 + 253 >= 290)
    {
          mu37 = 0;;
    }
    compare2 = pinSettings[mu37 + 253 - 1];
    int compareInt2 = (compare2 - '0');

    if (compareInt2 == 1)
    {
        return true;
    }
}
else
{
    return false;
}


    }

    string psi (string pinSettings, int count, bool rotate, string code2)
    {
char compare1;
char compare2;
static int psi1, psi2, psi3, psi4, psi5;

if (count == 0)
{
psi1 = 0, psi2 = 0, psi3 = 0, psi4 = 0, psi5 = 0;
}

if (rotate == true)
{
    psi1++;
    psi2++;
}

compare1 = code2[0];
if (psi1  >= 43)
{
psi1 = 0;
}
compare2 = pinSettings[psi1];


int result = (compare1 - '0') ^ (compare2 - '0');


compare1 = code2[1];

if (psi2 + 43 >= 90)
{
    psi2 = 0;

}

compare2 = pinSettings[psi2 + 43];

int result2 = (compare1 - '0') ^ (compare2 - '0');



string fPass;
fPass += (result+'0');
fPass += (result2+'0');

return fPass;
    }

1 个答案:

答案 0 :(得分:0)

使用调试器。您没有说明您正在开发什么平台,但常见的是Microsoft Visual Studio,Mac OS X和Linux。

在Visual Studio中以调试模式运行。将调试设置设置为在C ++异常时停止。

在Linux中使用GDB。使用gcc -ggdb -O0进行编译,使用gdb ./program运行,然后输入catch throw,然后输入run

在OS X中,我忘记了确切的步骤,但它们与Visual Studio类似。安装开发人员工具后,您还可以从命令行使用GDB。