我开始使用字符串代替字符数组,并且当我将一个大小为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;
}
答案 0 :(得分:2)
newWord[k]
newWord
字符串的大小为零。未定义超出std::string
末尾的索引行为。
您可能需要调整字符串的大小,因此:
newWord.resize(5);
答案 1 :(得分:1)
错误是因为newWord[k] = word[i+k];
没有为newWord中的字符串分配空格。字符串长度为0,执行此操作是未定义的行为。请改用.append。
如果pos不大于字符串长度,则函数永远不会 抛出异常(无抛出保证)。否则,它会导致未定义 行为。
在newWord [k]的情况下,pos是k。
使用字符串lib中的append函数很容易避免这种情况。
再次来自cplusplus.com:
的字符串&安培; append(const string&amp; str); //附加str。
的副本