我的任务是使用后缀数组在两个txt文件中查找最长的公共子字符串。我做了以下事情:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <fstream>
int main() {
char* charArrayA = charArrayFromTxtFile("~/txt_file1.txt");
char* charArrayB = charArrayFromTxtFile("~/txt_file2.txt");
int lengthA = strlen(charArrayA);
int lengthB = strlen(charArrayB);
char* suffixArrayA[lengthA];
char* suffixArrayB[lengthB];
for(int i = 0; i < lengthA; i++) { suffixArrayA[i] = &charArrayA[i]; }
for(int i = 0; i < lengthB; i++) { suffixArrayB[i] = &charArrayB[i]; }
charArrayA[lengthA] = 0;
charArrayB[lengthB] = 0;
...
return 0;
}
但是,当我编译这部分代码时,我在包含SECOND for循环的行中得到以下错误标志:
线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7ffeef1446e0)
作为参考,我用来创建charArrayA和charArrayB的函数是:
char* charArrayFromTxtFile(std::string fileName) {
std::ifstream filename; // Variable for file
int length; // Number of characters
filename.open(fileName);
filename.seekg(0, std::ios::end); // Goes to the end of the file
length = filename.tellg(); // Location of the end (index, length of file)
filename.seekg(0, std::ios::beg); // Go back to the beginning
char* charArray = new char[length]; // Allocate a char array of "length" file
filename.read(charArray, length); // Write characters from txt file into the char array
filename.close();
return charArray;
}
任何人都知道为什么第一个txt文件没有给我带来任何麻烦,但第二个文件没有?我会感激任何指导。非常感谢你们!
P.S。这是我的第一个stackoverflow问题,所以希望我足够清楚。我也会感谢任何有问题的反馈! :d
答案 0 :(得分:2)
您的charArrayfromTxtFile()函数不为null,终止字符串charArray。
charArray[length - 1] = '\0';
必须在使用strlen()迭代它们之前完成。