Заполнение указателя char в структуре

Я определил структуру "автомобиль" с моделью (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 ответов


Вы можете попробовать это :

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

это предотвращает вас от ошибки, если модель равна NULL, иначе malloc вам точное количество пространства и strcopy его; кроме того, это позволяет free(new->model) в конце во всех случаях.


здесь ваша модель-указатель символов.

но strcpy требует двух аргументов-это должно быть array или character pointer to which memory allocated by malloc or calloc

но ваш strcpy(); принимает один аргумент в качестве указателя символа, который не будет принят.

так

new->model = malloc(strlen(model) + 1) и затем напишите strcpy () он будет работать.


для дальнейшего использования эта функция исправила мою проблему...

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

посмотрите на код ниже и сравните его с вашей программой, я уверен, что вы узнаете, что не так с вашей программой

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