在结构中填充char指针

时间:2013-03-11 06:35:49

标签: c string pointers struct char

我已经定义了一个带有模型(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;
}

4 个答案:

答案 0 :(得分:4)

你可以试试这个:

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

如果模型为NULL,这可以防止你出错,否则你可以获得确切的空间量并对其进行扫描;另外,这允许你在所有情况下最后free(new->model)

答案 1 :(得分:3)

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

但是strcpy需要两个参数 - 应该是arraycharacter 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;
}