1

文字配列の代わりに文字列を使用し始めましたが、サイズ 5 で定義された文字配列の 1 つを文字列に変更するとエラーが発生します。プログラムを実行しようとすると、「Expression: string subscript out of range」というエラーが表示されます。

「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はゼロです。a の終わりを超えるインデックス付けの動作はstd::string定義されていません。

したがって、文字列のサイズを変更する必要がある場合があります。

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 です。

これは、文字列 lib で append 関数を使用することで簡単に回避できます。

cplusplus.comから、再び:

string& append (const string& str); // str のコピーを追加します。

于 2013-02-27T01:51:25.483 に答える