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 :

Comment on saisit un champ pointeur sur char dans une structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 8
    Par défaut Comment on saisit un champ pointeur sur char dans une structure
    Bonjour,

    Ma question a l'aire simple mais à la fois compliquée:

    Voici mon exemple:

    Je saisie une structure

    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
    //***************
    //   structure etudiant 
    //***************
     
    typedef struct {
                            char * nom; 
                            char * prenom; 
     
    }etudiant;
     
     
    //***************
    // Programme principal
    //***************
    void main () {
     
    etudiant e;
     
    // je veux saisir le nom de l etudiant en prenom aussi les espaces si jamais il est composé. 
    printf("Nom:   ");
    //scanf("%s",&e.*nom);
    gets(e.*nom);
    printf("votre nom est : % s",*nom);
    }
    Mais ceci ne marche pas même si on ajoute la bibliotheque string.h
    Comment le faire SVP !!!

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,



    Pour accéder à un élément : maStructure.monChamp.
    scanf attend un char * donc il suffit de lui passer e.nom mais déclarer un pointeur n'alloue pas l'espace pointée.
    Il te faut donc utiliser malloc et free (cf man ou recherche man free et man malloc dans la barre de recherche tout en haut à droite).

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    Le mieux dans ce cas la pour éviter qlq pb serait de faire ça

    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
     
    //***************
    // structure etudiant 
    //***************
     
    typedef struct {
    char  nom[50]; 
    char prenom[50]; 
     
    }etudiant;
     
    void main () {
     
    etudiant e;
     
    // je veux saisir le nom de l etudiant en prenom aussi les espaces si jamais il est composé. 
    printf("Nom: ");
    gets(e.nom);
    printf("votre nom est : % s",e.nom);
    }
    Et ma question est pourquoi du dé-référence ton pointeur a cause de ça tu lui envoie un char et non pas un char* ensuite comme dit plus haut tu ne n'alloue pas ton buffer.

    Ca serait bien de regarder comment fonctionne les pointeurs j'ai l'impression au vu du code que tu ne les maîtrise pas.

  4. #4
    Membre chevronné
    Avatar de maxusn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 175
    Par défaut
    Citation Envoyé par jouana Voir le message
    Le mieux dans ce cas la pour éviter qlq pb serait de faire ça

    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
     
    //***************
    // structure etudiant 
    //***************
     
    typedef struct {
    char  nom[50]; 
    char prenom[50]; 
     
    }etudiant;
     
    void main () {
     
    etudiant e;
     
    // je veux saisir le nom de l etudiant en prenom aussi les espaces si jamais il est composé. 
    printf("Nom: ");
    gets(e.nom);
    printf("votre nom est : % s",e.nom);
    }
    la fonction gets n’étant pas top, passer par la fonction fgets serais plus judicieux je pense.

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    Je ne fais que récupérer le code existant fournis par mehdouchi, sinon je serais resté sur un read tout banal qui fonctionne très bien aussi.

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 8
    Par défaut
    C'est gentil Merci à vous !!! vraiment

    Mais en ce qui concerne !!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct {
    char  nom[50]; 
    char prenom[50]; 
     
    }etudiant;
    je sais déjà comment le faire !! ( c'est ce qui est expliqué dans plusieurs post et dans les cours )

    Mais dans le cas ou on a des pointeurs je n'ai trouvé aucun post parlant de cela!!


    Je ne peux que faire cela !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void main () {
     
     
            etudiant e;
     
            char commentaire[100] ;
     
     printf("\nNom : ");
             fflush(stdin);
             gets(commentaire);
             e.nom=(char*)malloc((strlen(commentaire))*sizeof(char));
             strcpy(e.name,commentaire);
             printf(" votre nom est %s ", e.name);
    }
    et je trouve ça 1peu pardon du mot mais tellement "bête" car on veut de l'allocation dynamique et non pas un tableau statique "commentaire " comme mémoire tempon pour y stocker des choses puis de les copier par une fonction de copy pour mettre tout cela dans un tableau dynamique!!!

    Qu'en pensez vous y'a t il pas un moyen plus rapide pour allouer de la mémoire dès qu'on rentre la chaîne de caractère voulue ?

    Merci les amis !
    C'est gentil d'avoir répondu !


Discussions similaires

  1. Réponses: 22
    Dernier message: 14/04/2014, 00h02
  2. pointeur sur tableau dans une structure
    Par rollbich dans le forum Débuter
    Réponses: 3
    Dernier message: 02/06/2013, 22h23
  3. Réponses: 1
    Dernier message: 22/12/2009, 11h40
  4. Comment faire référence à un champ d'un etat dans une requete?
    Par polianita dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/06/2006, 15h26
  5. Comment faire référence à un champ d'un etat dans une requete?
    Par polianita dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 16/06/2006, 17h46

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