我已经定义了一个带有模型(char *模型)和模型年份(int year)的“car”结构。我有一个功能,将创建一个新的汽车结构;但是,复制char指针时会出现seg faulting。这应该为链表创建一个新节点。
Car *newCar(char *model, int year){
Car *new = malloc(sizeof(Car));
new->year = year;
new->model = malloc(MAX_LENGTH*sizeof(char));
strcpy(new->model, model);
new->next = NULL;
return new;
}
答案 0 :(得分:4)
你可以试试这个:
new->model = model == NULL ? NULL : strdup(model);
如果模型为NULL,这可以防止你出错,否则你可以获得确切的空间量并对其进行扫描;另外,这允许你在所有情况下最后free(new->model)
。
答案 1 :(得分:3)
这里你的模型是字符指针。
但是strcpy需要两个参数 - 应该是array
或character pointer to which memory allocated by malloc or calloc
但是你的strcpy();
将一个参数作为字符指针,不会被接受。
所以制作
new->model = malloc(strlen(model) + 1)
然后写下你的strcpy
()
即可。
答案 2 :(得分:3)
为了将来参考,这个功能解决了我的问题...
Car *createCar(char *model, int year){
Car *new = malloc(sizeof(Car));
new->year = year;
new->model = malloc(strlen(model)+1);
strcpy(new->model, model);
new->next = NULL;
return new;
}
答案 3 :(得分:1)
查看下面的代码并将其与您的计划进行比较,相信您会发现您的计划有什么问题
#include <stdio.h>
#include <string.h>
typedef struct car{
char *model;
int year;
}Car;
Car * newCar(char *, int );
int main()
{
Car *benz = newCar("S-class",1990);
printf("\nModel = %s\n",benz->model);
printf("\nYear = %d\n",benz->year);
}
Car * newCar(char *model, int year)
{
Car *new = malloc(sizeof(Car));
new->year = year;
new->model = malloc(strlen(model));
strcpy(new->model, model);
return new;
}