从字符数组更改为字符串时,“字符串下标超出范围”错误?

时间:2013-02-27 01:47:10

标签: c++

我开始使用字符串代替字符数组,并且当我将一个大小为5的字符数组更改为字符串时遇到错误。在尝试运行程序时,我得到的错误是“表达式:字符串下标超出范围”。

“newWord”最初是一个字符数组,但在将其更改为字符串时,我收到此错误。我不明白是什么导致这种情况,当使用字符数组时,程序运行良好。

int main() {
fstream inputFile;
fstream outputFile;
string newWord;
int i, k;
string word;
inputFile.open( "H:\\word.txt" );
outputFile.open( "H:\\newword.txt" );
if( inputFile )
{
    while( getline( inputFile, word ) )
    {
        for( i = 0; i < (word.length()- 3); ++i )
        {
            for( k = 0; k < 4; ++k )
                newWord[k] = word[i+k];
            cout << newWord << endl;
            outputFile << newWord << endl;
        }
    }
}
return 0;
}

2 个答案:

答案 0 :(得分:2)

newWord[k]

newWord字符串的大小为零。未定义超出std::string末尾的索引行为。

您可能需要调整字符串的大小,因此:

newWord.resize(5);

答案 1 :(得分:1)

错误是因为newWord[k] = word[i+k];没有为newWord中的字符串分配空格。字符串长度为0,执行此操作是未定义的行为。请改用.append。

来自cplusplus.com

  

如果pos不大于字符串长度,则函数永远不会   抛出异常(无抛出保证)。否则,它会导致未定义   行为。

在newWord [k]的情况下,pos是k。

使用字符串lib中的append函数很容易避免这种情况。

再次来自cplusplus.com

  

的字符串&安培; append(const string&amp; str); //附加str。

的副本