8
votes

Remplir un pointeur de caractère dans une structure

J'ai défini une structure "voiture" avec un modèle (modèle Char *) et l'année du modèle (Int année). J'ai une fonction qui créera une nouvelle structure de voiture; Cependant, il s'agit de faute de la tâche lors de la copie des pointeurs de char. Ceci est censé créer un nouveau nœud pour une liste liée.

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


8 commentaires

Du New-> Modèle = MALLOC (SHLEN (MODÈLE) + 1) ?


Vous devriez vérifier que char * modèle n'est pas null . En outre, comme une bonne pratique, vérifiez toujours le retour du Malloc s.


@CNICUTAR Merci; Cependant, les problèmes sont toujours là.


@Cong Xu Char * Modèle ne sera jamais nul car il analyse des données à partir d'un fichier dans une autre fonction.


Tout d'abord, n'utilisez pas de nouveau nom de variable car c'est un mot clé


@Kinjalpatel, il peut utiliser en toute sécurité une nouvelle avec un compilateur C


Vous êtes sûr que le modèle Char * est NULL terminé?


Avez-vous essayé ce que Cjiclutar a proposé ..... c'est nouveau-> Model = Malloc (Strlen (modèle) + 1)


4 Réponses :


3
votes

Voici votre modèle est le pointeur de caractères.

mais Strcpy nécessite deux arguments - qui devraient être Array ou Pointeur de caractères sur la mémoire allouée par MALLOC ou CALLOC

mais votre strcpy (); prend un argument comme un pointeur de caractères qui ne sera pas accepté.

aussi faire

New-> Modèle = MALLOC (modèle (modèle) + 1) puis écrivez votre Strcpy () ça fonctionnera.


3 commentaires

ou nouveau-> modèle = strDUP (modèle); qui fait la même chose en une seule instruction.


@Edouardthiel sauf STRUP n'est pas standard (bien qu'il puisse être facilement implémenté).


STRUP () est conforme à SVR4, 4.3BSD, POSIX.1-2001.



1
votes

Regardez le code ci-dessous et comparez-le avec votre programme, je suis sûr que vous découvrirez ce qui ne va pas avec votre programme

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


0 commentaires

4
votes

Vous pouvez essayer ceci:

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


0 commentaires

6
votes

pour référence future Cette fonction corrige mon problème ...

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


2 commentaires

Vous malloc'd la mauvaise quantité d'espace. Il devrait être strylen (modèle) +1 . Si cela semblait résoudre votre problème, vous marchez sur des œufs!


@ M.M tu as raison! Je traversais mes anciennes missions de devoirs de première année et réalisa que je n'ai jamais posté la solution. J'ai mis à jour ma réponse pour refléter l'erreur que vous avez attrapée.