IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Passage d'un pointeur sur une structure en paramètre d'une fonction de saisie au clavier


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Passage d'un pointeur sur une structure en paramètre d'une fonction de saisie au clavier
    Bonsoir,
    je suis débutant en programmation C. J'ai un problème avec le passage d'un pointeur sur une structure en paramètre d'une fonction de saisie au clavier. Le programme se plante à l'endroit mentionné dans le code ci-dessous.Pouvez-vous m'aider?

    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
    #include<stdio.h>
    #include<conio.h>
     
    struct Personne{
        char nom[20];
        char prenom[20];
        int age;
    };
    typedef struct Personne PERSONNE;
     
    void Saisie(PERSONNE *pers)
    {
         printf("****Saisie d'une personne****\n");
         printf("Donner le nom \n");
         scanf("%s",&(pers->nom));  //le programme se plante ici
         printf("Donner le prenom \n");
         scanf("%s",&(pers->prenom));
         do{
            printf("donner l'age");
            scanf("%d",&(pers->age));
            printf("lecture faite");
            }
         while( pers->age <=0);
    }
     
    //la fonction main
    int main()
    {
        PERSONNE *pers;
        Saisie(pers); 
        printf("\n Appuie sur n'importe quelle touche pour fermer");
        getch();  
        return 0;
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Ton problème est que tu n'initialises pas ton pointeur PERSONNE *pers;. De ce fait, il pointe vers une zone complètement aléatoire.
    Il te faut allouer une zone mémoire avec malloc() de la taille sizeof(PERSONNE). Seulement par la suite tu pourras l'utiliser comme tu le souhaites, puis une fois fait, libérer cette zone mémoire avec la fonction free().

    Notes :
    • Pour des tableaux de char, le & n'a pas à être utilisé dans scanf(), et on préfèrera utiliser à la place la fonction fgets() plus sécurisante.
    • On préfèrera utiliser des noms de types non tout en majuscules, qui ont pour habitude de désigner des constantes #define
    • Préférer utiliser getchar() (déjà inclu dans <stdio.h>) plutôt que getch() qui n'est pas portable.

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Comme l'a dit Winjerome il faut initialiser pers dans ton main();. Comme cette variable est déclarée dans main(); tu peux éviter une allocation dans le tas. Il suffit simplement de déclarer pers comme une variable et non comme un pointeur : PERSONNE pers;.
    Une fois fait il te suffit de transmettre l'adresse de cette variable à la fonction Saisie(&pers);.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/08/2013, 14h38
  2. Réponses: 3
    Dernier message: 18/01/2010, 16h17
  3. Réponses: 10
    Dernier message: 10/01/2010, 16h24
  4. Réponses: 11
    Dernier message: 24/04/2008, 13h15
  5. Passage d'une structure en paramètre
    Par NeraOne dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/05/2007, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo