0
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) 我不知道为什么。请帮忙!

4

2 回答 2

1

代码在我的机器上运行得很好。也许问题在于该文件的 ATOM 条目多于 700 个?而且您的字符串数组只能包含 700。如果您不知道会有多少条目,请尝试使用向量

这是我测试代码的文件:

soadiaodiaodsa
sdaiod sadoiasoda
ATOM alodaskd
ATOM alosad
ATOM lol
saodai aosdisoad daiosiadsa
ATOM ATOM ATOM
ATOM LOL 测试
lolololol

我还尝试输出数组中的前 15 个条目,它工作正常,并且只包含以 ATOM 开头的行:

for(unsigned int i=0;i<15;i++)
  cout << arrAtoms[i] << endl;
于 2013-11-08T19:13:06.023 回答
0

您正在使用array长度 700。如果您的文件有超过 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;                
}
于 2013-11-08T21:01:14.433 回答