-2

この関数を呼び出すたびに、プログラムが動作しなくなりますが、その理由がわかりません。ここに私のコードスニペットがあります:

#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
using namespace std;

void FindReplace(char Memory[], string FindWord, string  ReplaceWord, const int  MAXNUMCHARS)
   {
        int i = 0;
        int SizeWord = FindWord.length();
        int SizeReplace = ReplaceWord.length();

 for(i = 0; i <= MAXNUMCHARS; i++)
   {

       if(Memory[i] == FindWord[i] && Memory[i+1] == FindWord[i+1] && Memory[i+2] ==        FindWord[i+2])
       {
             Memory[i] = ReplaceWord[i];
             Memory[i+1] = ReplaceWord[i+1];
             Memory[i+2] = ReplaceWord[i+2];
       }

 }
}

そして、それを呼び出すコードがここにあります

if(option == 'F')
{
     FindReplace(Memory, FindWord, ReplaceWord, MAXNUMCHARS);
     OutputMemoryToFile(Memory , Out);//copies array to output file
     cout << "String 'the' has been found and replaced with 'can'";
     cout << endl;
}

アイデアはありますか?:/

4

3 に答える 3

2

私が見る限り、あなたの呼び出しコードはそれを保証しておらず、Memory少なくとも文字の長さです(ただし、呼び出しコードを投稿していないため、推測です)。FindWordReplaceWordMAXNUMCHARS+3

于 2013-08-30T08:58:11.100 に答える
0

また、i <= MAXNUMCHARS をチェックして範囲外に出ることもできますが、i+2 を使用します

于 2013-08-30T09:10:56.417 に答える