int main(int argc, const char * argv[])
{
ifstream input;
input.open("test.txt");
string arrAtoms[700];
string temp;
int i = 0;
while(getline(input, temp)){
if(startsWithAtom(temp)) {
arrAtoms[i] = temp;
i++;
}
}
return 0;
}
bool startsWithAtom(string test) {
string atom = "ATOM";
if(test.find(atom) == 0) {
return true;
}
return false;
}
所以这是我的代码来读取一行并将其存储在arrAtoms []中,如果它以“ATOM”开头。 出于某种原因,我不断收到错误Thread1:EXC_BAD_ACCESS(code = EXC_1386_GPFLT) 我不知道为什么。请帮忙!
答案 0 :(得分:1)
我的机器上的代码运行得很好。也许问题是该文件的ATOM条目多于700?而你的字符串数组只能包含700个。如果你不知道会有多少条目,请尝试使用vector
这是我测试代码的文件:
soadiaodiaodsa
sdaiod sadoiasoda
ATOM alodaskd
ATOM alosad
ATOM lol
saodai aosdisoad daiosiadsa
原子原子原子
ATOM LOL测试
lololololol
我也尝试输出数组中的前15个条目,它工作正常,只包含以ATOM开头的行:
for(unsigned int i=0;i<15;i++)
cout << arrAtoms[i] << endl;
答案 1 :(得分:0)
您正在使用长度为700的array
。如果您的文件有超过700行以“ATOM”开头,则会发生内存分配错误。更好的方法是使用vector
,这样您就不必担心文件的大小。
#include <vector>
int main(int argc, const char * argv[])
{
ifstream input;
input.open("test.txt");
std::vector <string> arrAtoms;
string temp;
while(getline(input, temp)){
if(startsWithAtom(temp)) {
arrAtoms.push_back(temp);
}
}
return 0;
}