1

我开始使用字符串代替字符数组,当我将定义为大小为 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;
}
4

2 回答 2

2
newWord[k]

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

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

newWord.resize(5);
于 2013-02-27T01:50:40.997 回答
1

该错误是因为newWord[k] = word[i+k];没有为 newWord 中的字符串分配空间。字符串长度为 0,这样做是未定义的行为。请改用 .append。

来自cplusplus.com

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

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

这很容易通过使用字符串库中的 append 函数来避免。

cplusplus.com再次:

字符串&追加(常量字符串&str);//附加一个str的副本。

于 2013-02-27T01:51:25.483 回答