A voir également:
- Liste Chainée en C
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
- Liste de diffusion whatsapp - Guide
- Liste groupe whatsapp - Guide
4 réponses
Droopy_
Messages postés
248
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
17 janvier 2009
25
19 nov. 2008 à 23:58
19 nov. 2008 à 23:58
Effectivement, moi je mettrais :
newElement->n=(char*)malloc(sizeof(char)*30);
Tu l'as d'ailleurs fait correctement plus haut dans ton programme.
Pour ton warning, c'est normal, il faut mettre :
strcpy(newElement->n,name); // Sans le &
newElement->n=(char*)malloc(sizeof(char)*30);
Tu l'as d'ailleurs fait correctement plus haut dans ton programme.
Pour ton warning, c'est normal, il faut mettre :
strcpy(newElement->n,name); // Sans le &
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
19 nov. 2008 à 23:13
19 nov. 2008 à 23:13
Salut,
J'ai lu vraiment ton code en diagonale. Et je me suis arrêté au premier truc qui m'a choqué. Donc l'erreur est peut-être ailleurs.
char *name;
newElement->n=(char*)malloc(sizeof(name));
sizeo(name)=sizeof(char*) = 4 (taille du pointeur). Et non 30 comme tu l'entendais.
Tu peux par exemple faire tout simplement : char name[30]; et là sizeof(name) = 30.
J'espère que l'erreur est là ;)
Cdlt
J'ai lu vraiment ton code en diagonale. Et je me suis arrêté au premier truc qui m'a choqué. Donc l'erreur est peut-être ailleurs.
char *name;
newElement->n=(char*)malloc(sizeof(name));
sizeo(name)=sizeof(char*) = 4 (taille du pointeur). Et non 30 comme tu l'entendais.
Tu peux par exemple faire tout simplement : char name[30]; et là sizeof(name) = 30.
J'espère que l'erreur est là ;)
Cdlt
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
20 nov. 2008 à 00:08
20 nov. 2008 à 00:08
Re,
J'ai corrigé les quelques erreurs qu'il y avait dans ton code.
Sur ma machine, il marche.
Sinon, à noter qu'effectivement, comme a dit Droopy_, il vaut mieux utiliser strncpy, et éviter d'utiliser scanf comme tu as fait (sans contrôler la taille). Sinon il y a des risques ;)
De plus lorsque tu fais du malloc, faut vérifier si le pointeur n'est pas NULL, sinon, il risque d'y avoir des petits segfault si ça échoue ^^.
Cdlt
J'ai corrigé les quelques erreurs qu'il y avait dans ton code.
Sur ma machine, il marche.
#include <stdlib.h> #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct element element; struct element { int a; char n[30]; struct element *nxt; }; typedef element* llist; int main() { int number, i; char name[30]; /* Declaration of a list */ element *list = NULL; /* We add elements to the list */ for(i=0; i<5; i++) { printf("Plz enter an integer \n"); scanf("%d", &number); printf("Plz enter a char \n"); scanf("%s", name); /* We create a new element */ element* newElement = malloc(sizeof(element)); /* We add the data to the new Element */ newElement->a = number; //newElement->n=malloc(sizeof(name)); strcpy(newElement->n,name); /* We set the adress */ newElement->nxt = list; list=newElement; printf("\n"); } /* Display the list */ element *tmp = list; printf("\nThe list:\n"); while(tmp != NULL) { printf("%d ", tmp->a); printf("%s\n", tmp->n); tmp = tmp->nxt; } return 0; }
Sinon, à noter qu'effectivement, comme a dit Droopy_, il vaut mieux utiliser strncpy, et éviter d'utiliser scanf comme tu as fait (sans contrôler la taille). Sinon il y a des risques ;)
De plus lorsque tu fais du malloc, faut vérifier si le pointeur n'est pas NULL, sinon, il risque d'y avoir des petits segfault si ça échoue ^^.
Cdlt
20 nov. 2008 à 00:00
strncpy(newElement->n,name,30);