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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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!