使用 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文件包含由逗号分隔的信息。
303047898,1,乔希,哈德韦尔,050-8103580,7/7/89,NY,0
希望你能尽快找到解决方案,因为我已经尝试了一切,但我迷路了!!谢谢!
您在此处创建一个大小1
的char
数组:
string temp; // temp.length() == 0
char *str = new char[temp.length() + 1];
然后你使用它,就好像它在这里有更大的尺寸一样:
strcpy(str, temp.c_str()); // temp.length() > 1 after getline
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么当 vector 为空时会显示运行时错误?
- glfw 的基本设置会导致与 emscripten 生成的 js 文件中的事件侦听器有关的运行时错误
- 通过Linux命令行执行时,可执行文件运行正常 - 调用C System()命令时运行时错误
- 使用 getline、strcpy、strtok c++ 加载.txt文件时出现运行时错误
- 读取结构C++二进制文件的运行时错误
- 使用 boost::iostreams 和 zlib 读取.gz文件的运行时错误
- 运行时错误 -f1.exe 不存在或不是可执行文件
- 运行时错误与文件io和向量(c++)
- 将变量移动到头文件时出现运行时错误
- 如何在运行时错误发生之前检查.cpp文件的最后一行