kyle
kyle

Reputation: 2638

Filling a char pointer in a struct

I have defined a "car" struct with a model (char *model) and the year of the model (int year). I have a function that will create a new car struct; however, it is seg faulting when copying the char pointers. This is supposed to create a new node for a linked list.

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

Upvotes: 9

Views: 23572

Answers (4)

kyle
kyle

Reputation: 2638

For future reference this function fixed my issue...

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

Upvotes: 7

Edouard Thiel
Edouard Thiel

Reputation: 6228

You may try this :

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

this prevents you from a bug if model is NULL, else malloc you the exact amount of space and strcopy it; plus, this allows you to free(new->model) at the end in all the cases.

Upvotes: 4

Barath Ravikumar
Barath Ravikumar

Reputation: 5836

Have a look at the code below and compare it with your program, am sure you will find out what's wrong with your program

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

Upvotes: 2

Hitesh Menghani
Hitesh Menghani

Reputation: 987

Here your model is character pointer.

But strcpy requires two arguments - that should be array or character pointer to which memory allocated by malloc or calloc

But your strcpy(); takes one argument as character pointer which will not be accepted.

so make

new->model = malloc(strlen(model) + 1) and then write your strcpy () it will work.

Upvotes: 4

Related Questions