Erreur : Atribuer une valeur scanf à une variable d'une structure
Bonjour à toute la communauté Developpez.
J'ai souhaité revoir un peu les listes chainées que je n'ai jamais réellement maîtrisé. Donc rien de mieux qu'un petit programme pour tester... enfin si ça marche >_<
Ce que j'essaye de faire c'est un programme console assez basique dans lequel on peut rentrer des informations (nom, prenom, etc...) qui seront stockées dans une liste chainée.
Un problème se pose lorsque je veux assigner la valeur scanf rentrée par l'utilisateur à la variable "nom" de la structure "contact".
Voici la partie du code qui foire :
Code:
1 2 3 4 5
|
scanf ("%s", &vNom);
contact *sel;
sel->nom = (char*) malloc ((strlen (vNom) + 1) * sizeof (sel));
strcpy(sel->nom,vNom); |
Et voici le code complet :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| #include <stdio.h>
#include <string.h>
#include <stdlib.h>
int jid=0;
typedef struct contact {
int id;
char *nom;
struct contact *next;
};
contact* add_contact (contact *nouv, contact *tete) { // fct qui ajoute une maille à la liste chainée
contact * pCourant;
if (tete != NULL) {
pCourant = tete;
while (pCourant->next != NULL)
pCourant = pCourant->next;
}
nouv = (contact*)malloc(sizeof(struct contact));
if (tete!= NULL ) pCourant->next = nouv;
nouv->next = NULL;
nouv->nom = NULL;
return nouv;
}
contact* mod_contact (contact *sel, char *vNom) { // associe des valeurs aux variables de la liste chainée
sel->id = jid;
jid++;
sel->nom = (char*) malloc ((strlen (vNom) + 1) * sizeof (sel));
strcpy(sel->nom,vNom);
return sel;
}
int main ()
{
/* Valeurs entrées par l'utilisateur */
int choix; // choix d'action (ajouter un contact/lire la liste de contacts/quitter)
char *vNom; // variable nom
/* Initialisation des pointeurs pour la liste chainée */
contact *nouv; // maille temporaire de la liste
contact *tete; // tete le la liste chainée
contact *sel; // maille selectionnee localement (sur laquelle on veut travailler)
tete = NULL;
sel = NULL;
while (1) {
choix=0;
printf ("Que voulez-vous faire?\n 1)Ajouter un contact\n 2)Visualiser la liste de contacts\n 3)Quitter\n\n");
scanf ("%s", &choix);
if (choix == '1') {
sel = add_contact (nouv, tete); //creer une nouvelle maille
if (tete == NULL)
tete=sel; // si c'est la premiere maille, c'est la tete
printf ("\nNom :");
scanf ("%s", &vNom);
sel = mod_contact (sel, vNom); // rentrer vNom dans la liste chainée
printf ("Operation terminee\n\n"); // inutile mais j'ai trouvé ça joli
}
else if (choix == '2') {
printf ("Carnet vide\n\n"); // pour le moment je mets ça
}
else if (choix == '3') {
break; // quitter
}
else
printf ("Saisie incorrecte\n\n");
}
return 0;
} |
Ah oui et l'erreur est une exception win32 non-gérée.
Merci d'avance pour votre aide!