从文本文件中读取对象

时间:2017-08-24 22:05:47

标签: c++

我试图从文本文件属性中读取:char *和int并创建类B的对象。这是我的实现:

 B * p=new B[3];
for(int i=0;i<3;i++)
{
    p[i]=B("John",300);

}
ofstream file("example.txt");

for(int i=0;i<3;i++)
{
    file<<p[i].getName()<<" "<<p[i].GetValue()<<endl;      
}
file.close();
  //saved succesfully

 ifstream file2("example.txt");

B *q=new B[3];
char* temp;
int time1;
for(int i=0;i<3;i++)
{
    file2>>temp>>time1;
    char*name1=new char[strlen(temp)+1];
    strcpy(name1,temp); //here name1 is red correctly
   q[i]=B(name1,time1); // 
}
file2.close();

保存3个对象是成功的,我已经检查了文件。但是当我从中读取3个对象时,第一个对象被正确创建,但是对于其他对象,我传递的char * propery被初始化为“,”和第二个参数int也是正确的。为什么第一个对象成功创建而其他对象不成功?

1 个答案:

答案 0 :(得分:2)

yyyy-MM-dd_HH-mm-ss无效,因为file2 >> temp是未初始化的指针。这个temp需要一个预先分配的缓冲区。

我建议少用&#39;明星&#39; (理想情况下为零)和更多标准容器,在这种情况下为operator>>std::vector。这也将解决你的内存泄漏......

好的,如果你不能,请实现自己的功能限制版std::string。其他任何事情都违反了The single responsibility principle,并且这不是很好的C ++。

如果你不想走那么远,一个简单的解决方法是让std::string成为一个实际数组,其大小与文件中名称所需的最大字符数相同。 / p>

最后,考虑一下this是否可以temp B::name