STD::在C++中访问STD::String的Offic范围错误 我是三个中等能力程序员的一部分,我们目前正在尝试用C++编写一个程序来体现我们的新加密算法。但是,我们遇到了一个错误,表明我们在某个点超过了字符串的长度。我自己也试过调试这个,但没有成功。它在混乱函数中,但是

STD::在C++中访问STD::String的Offic范围错误 我是三个中等能力程序员的一部分,我们目前正在尝试用C++编写一个程序来体现我们的新加密算法。但是,我们遇到了一个错误,表明我们在某个点超过了字符串的长度。我自己也试过调试这个,但没有成功。它在混乱函数中,但是,c++,outofrangeexception,C++,Outofrangeexception,无论如何,这里有一个带有临时主函数的源代码粘贴: 它可以很好地编译,但在运行时,会出现以下错误: 在抛出'std::out_of_range'的实例后调用terminate 内容:基本字符串::substr 流产 您的问题之一在于这一行: for(int i = 0; i < ( inPT.length() + 1 ); i++) 或者可能要使用一个更为实用的C++结构,比如STD::FoYX,这样就不能产生这种类型的错误。正如注释中所指出的,在调试器中运行它会很快向您指出这一点。大概

无论如何,这里有一个带有临时主函数的源代码粘贴:

它可以很好地编译,但在运行时,会出现以下错误:

在抛出'std::out_of_range'的实例后调用terminate 内容:基本字符串::substr 流产


您的问题之一在于这一行:

for(int i = 0; i < ( inPT.length() + 1 ); i++)

或者可能要使用一个更为实用的C++结构,比如STD::FoYX,这样就不能产生这种类型的错误。正如注释中所指出的,在调试器中运行它会很快向您指出这一点。

大概是这段代码

if(modCount >= inPT.length())
{
    modCount = 0;
}
int mod = inKey.at(modCount);         
是用来阅读的

if(modCount >= inKey.length())
{
    modCount = 0;
}
int mod = inKey.at(modCount);         

你对inKey越界访问的防范使用了错误的变量。

请你将代码正确缩进并粘贴到这里好吗?几乎是旁白:你为什么认为编写自己的加密函数是个好主意?温和的程序员而不是好战的程序员?Philip,这是一个工程类项目。每个人都应该设计一些东西。我们的团队决定做一个加密算法。我们不是最有经验的程序员,但我们也不是完全的新手。或者新的C++11范围基for loop:for char C:inPT{…}这也是造成问题的原因。你和约翰的答案都是正确的!非常感谢!
if(modCount >= inKey.length())
{
    modCount = 0;
}
int mod = inKey.at(modCount);