我无法弄清楚我的代码出了什么问题。我使用添加监视来确保正确读取信息并将其输入到数组中。我得到的错误是:


  访问冲突写入位置。


#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
//string name;
//double id = 0;
int numQ = 0;
int numA = 0;

string temp;
string arrayQ[50];
string arrayA[50];

fstream SaveFile;
SaveFile.open("TestBank.txt", ios::in);
while (!SaveFile.eof())
{
    getline(SaveFile, temp, '#');
    if (temp.length() > 5)
    {
        arrayQ[numQ] = temp;
        numQ++;
    }
    else
    {
        arrayA[numA] = temp;
        numA++;
    }
}
SaveFile.close();

cout << "The question is\n" << arrayQ[0] << endl;
cout << "The answer is\n" << arrayA[0] << endl;

return 0;
}

最佳答案

首先,您不应该在C ++中循环使用eof。

然后,应确保numQnumA不会超出范围,因为它们的值取决于文件内容:

...
while (getline(SaveFile, temp, '#'))
{
    if (temp.length() > 5)
    {
        if (numQ>=50)
            cerr << "Ouch ! numQ=" <<numQ<<endl;
        else arrayQ[numQ] = temp;
        numQ++;
    }
    else
    {
        if (numA>=50)
            cerr << "Ouch ! numA=" <<numA<<endl;
        else arrayA[numA] = temp;
        numA++;
    }
}


最后,您可以考虑使用vector<string>代替字符串数组。在这种情况下,您只需在正确的向量中push_back()字符串,而不必担心预定的大小。

关于c++ - 访问冲突写定位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36166722/

10-12 02:58