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; }
4 Réponses :
Voici votre modèle est le pointeur de caractères. P>
mais Strcpy nécessite deux arguments - qui devraient être mais votre aussi faire p>
Array code> ou
Pointeur de caractères sur la mémoire allouée par MALLOC ou CALLOC CODE> P> P> P> P>
strcpy (); code> prend un argument comme un pointeur de caractères qui ne sera pas accepté. P>
New-> Modèle = MALLOC (modèle (modèle) + 1) code> puis écrivez votre
Strcpy
() code> ça fonctionnera. P>
ou nouveau-> modèle = strDUP (modèle); code> qui fait la même chose en une seule instruction.
@Edouardthiel sauf STRUP code> n'est pas standard (bien qu'il puisse être facilement implémenté).
STRUP () est conforme à SVR4, 4.3BSD, POSIX.1-2001.
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; }
Vous pouvez essayer ceci:
new->model = model == NULL ? NULL : strdup(model);
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; }
Vous malloc'd la mauvaise quantité d'espace. Il devrait être strylen (modèle) +1 code>. 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.
Du
New-> Modèle = MALLOC (SHLEN (MODÈLE) + 1) CODE>?
Vous devriez vérifier que
char * modèle code> n'est pas
null code>. En outre, comme une bonne pratique, vérifiez toujours le retour du
Malloc code> 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)