9

我已经定义了一个带有模型(char *model)和模型年份(int year)的“汽车”结构。我有一个函数可以创建一个新的汽车结构;但是,在复制 char 指针时会出现段错误。这应该为链表创建一个新节点。

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;
}
4

4 回答 4

7

以供将来参考,此功能解决了我的问题...

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;
}
于 2015-11-02T20:41:07.557 回答
4

这里你的模型是字符指针。

但是 strcpy 需要两个参数 - 应该是arrayorcharacter pointer to which memory allocated by malloc or calloc

但是您strcpy();将一个参数作为不被接受的字符指针。

所以让

new->model = malloc(strlen(model) + 1)然后写你的strcpy ()它会工作。

于 2013-03-11T06:47:33.897 回答
4

你可以试试这个:

new->model = model == NULL ? NULL : strdup(model);

如果模型为NULL,这可以防止您出现错误,否则会为您分配确切的空间量并对其进行strcopy;另外,这使您可以free(new->model)在所有情况下最终完成。

于 2013-03-11T10:34:41.560 回答
2

看看下面的代码并将其与您的程序进行比较,相信您会发现您的程序有什么问题

#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;
}
于 2013-03-11T06:48:33.193 回答