需要修复与c ++代码相关的错误 - 与strcpy相关

时间:2015-05-03 20:58:55

标签: c++

我的代码在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();

}
是的,请有人帮助我。我会很开心

1 个答案:

答案 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的一些示例代码,看看它是如何用于序列化(写出和读入)对象的。