如何解决错误:分配给具有数组类型的表达式

时间:2018-10-08 15:33:51

标签: c

我被要求创建一个carinfo结构和一个createcarinfo()函数以创建一个数据库。但是,当试图为汽车的品牌和型号的阵列分配内存时,终端机指出了两个错误。

针对:

newCar->brand =(char*)malloc(sizeof(char)*(strlen(brand) + 1));
newCar->model = (char*)malloc(sizeof(char)*(strlen(model) + 1));

它说有一个错误:分配给具有数组类型的表达式和指向等号的箭头。

struct carinfo_t {

    char brand[40];
    char model[40];
    int year;
    float value;



};

struct carinfo_t *createCarinfo(char *brand, char *model, int year, float value){

   struct carinfo_t *newCar;
   newCar=(struct carinfo_t*)malloc( sizeof( struct carinfo_t ) );

    if (newCar){
         newCar->brand =(char*)malloc(sizeof(char)*(strlen(brand) + 1));
        newCar->model = (char*)malloc(sizeof(char)*(strlen(model) + 1));
       strcpy(newCar->brand, brand);
        strcpy(newCar->model, model);
        //newCar->brand=brand;
        //newCar->model=model;
        newCar->year=year;
        newCar->value=value;
    }
    return newCar;


};

3 个答案:

答案 0 :(得分:1)

两件事。

  1. 在您的代码中,brandmodel已经是数组类型,在声明时根据它们的大小(char [40])为它们分配了内存。您无需使用分配器功能分配任何内存(与指针不同)。

  2. 您不能分配给数组类型。数组类型不适用于赋值运算符的LHS参数。这基本上会引发您所看到的错误,但是如果坚持使用#1,您将永远无法到达这里。

答案 1 :(得分:0)

似乎您可能输入了错误的struct定义。 也许将其更改为以下内容:

struct carinfo_t {
    char* brand;
    char* model;
    int year;
    float value;
};

出现此错误的原因是因为您试图将malloc返回的指针分配给数组。那行不通。相反,您应将malloc返回的指针存储在char*中。

答案 2 :(得分:0)

您要在结构中声明固定大小的数组。

也许您想这样做:

struct carinfo_t {

char *brand;
char *model;
int year;
float value;
};