我的代码在strcpy
中有错误。
我将名称,公司,类型,颜色和状态声明为字符串
void SaveList(void)
{
ofstream pFile;
pFile.open("Car.dat",ios::binary);
if(pFile==NULL)
{
cout<<"Cannot Open File \n updated Data not saved into file\n\n";
exit(0);
}
struct Car_F NF; // structure variable to hold data for file
struct Car *CURR;
for (CURR = HEAD ; CURR != HEAD ; CURR = CURR->forw )
{ // copy record from linked list into file record structure
NF.ID=CURR->ID;
strcpy(NF.name,CURR->name);
strcpy(NF.Company_of_car,CURR ->Company_of_car);
strcpy(NF.type_of_car,CURR ->type_of_car);
strcpy(NF.color_of_car,CURR ->color_of_car);
NF.model_of_car = CURR->model_of_car;
NF.price_of_car = CURR->price_of_car;
strcpy(NF.state_of_car,CURR ->state_of_car);
pFile.write((char*) &NF,sizeof(NF)); // write record into file
}
pFile.close();
}
是的,请有人帮助我。我会很开心
答案 0 :(得分:0)
strcpy
函数是一个C函数,它对char*
个字符数组进行操作(C用作字符串)。请参阅:http://www.cplusplus.com/reference/cstring/strcpy/
C ++字符串对象完全不同,并且不需要调用C字符串函数。有关C ++字符串成员函数的列表,请参见此处:http://www.cplusplus.com/reference/string/string/
operator=
字符串分配就是你所追求的。要解决此问题的第一步,我会将strcpy(NF.name,CURR->name);
替换为NF.name = CURR->name;
(依此类推)。通过使用运算符函数语法,C ++对象使其看起来更加简单和自然。
另外,为什么要在写出之前完全复制记录?这有必要吗?对于代码而言,还有许多其他不理想的事情,例如将结构转换为char*
来写出来。我建议研究iostream
的一些示例代码,看看它是如何用于序列化(写出和读入)对象的。