繁体   English   中英

使用getline,strcpy,strtok C ++加载.txt文件时出现运行时错误

[英]Run time error with .txt files loading using getline, strcpy, strtok c++

我在从.txt文件加载数据时遇到问题。 问题是有时代码可以完美运行,但大多数时候我只是遇到了运行时错误。 有趣的是,我没有对代码进行任何更改,有时会出现错误,有时甚至根本没有错误!

void CustomersDB::LoadCustomersDATA()
{
    string temp;
    char *str = new char[temp.length() + 1];
    char *p;
    int i, Temp;

    ifstream CustomerFile("CustomersData.txt");
    while (getline(CustomerFile, temp))
    {
        strcpy(str, temp.c_str());
        p = strtok(str, ",");
        string IDNumber = p;
        p = strtok(NULL, ",");
        int Type = atoi(p);
        p = strtok(NULL, ",");
        string FirstName = p;
        p = strtok(NULL, ",");
        string LastName = p;
        p = strtok(NULL, ",");
        string PhoneNumber = p;
        p = strtok(NULL, ",");
        string DateOfBirth = p;
        p = strtok(NULL, ",");
        string Address = p;

        if (Type == 1)
        {
            CustomersDB::getInstance()->AddNewCustomer(new     RegularCustomers(IDNumber, Type, FirstName, LastName, PhoneNumber, DateOfBirth, Address));
            i = FindCustomerIndex(IDNumber);
            p = strtok(NULL, ",");
            Temp = atoi(p);
            while (p != NULL)
            {
                CustomersDB::getInstance()->Client[i]->addAccountsToAllowed(Temp);
                p = strtok(NULL, ",");
            }
        }
        else if (Type == 2)
        {
            CustomersDB::getInstance()->AddNewCustomer(new GoldCustomers(IDNumber, Type, FirstName, LastName, PhoneNumber, DateOfBirth, Address));
            i = FindCustomerIndex(IDNumber);
            p = strtok(NULL, ",");
            Temp = atoi(p);
            while (p != NULL)
            {
                CustomersDB::getInstance()->Client[i]->addAccountsToAllowed(Temp);
                p = strtok(NULL, ",");
            }
        }
        else if (Type == 3)
        {
            CustomersDB::getInstance()->AddNewCustomer(new PlatinumCustomers(IDNumber, Type, FirstName, LastName, PhoneNumber, DateOfBirth, Address));
            i = FindCustomerIndex(IDNumber);
            p = strtok(NULL, ",");
            Temp = atoi(p);
            while (p != NULL)
            {
                CustomersDB::getInstance()->Client[i]->addAccountsToAllowed(Temp);
                p = strtok(NULL, ",");
            }
        }
    }

    CustomerFile.close();
}

.txt文件包含用逗号分隔的信息。

希望您能尽快找到解决方案,因为我已经尝试了一切,但我迷路了!! 谢谢!

您将在此处创建大小为1char数组:

string temp; // temp.length() == 0
char *str = new char[temp.length() + 1];

然后,您可以使用它,好像它在这里具有更大的尺寸:

strcpy(str, temp.c_str()); // temp.length() > 1 after getline

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM