我被要求创建一个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;
};
答案 0 :(得分:1)
两件事。
在您的代码中,brand
和model
已经是数组类型,在声明时根据它们的大小(char [40]
)为它们分配了内存。您无需使用分配器功能分配任何内存(与指针不同)。
您不能分配给数组类型。数组类型不适用于赋值运算符的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;
};