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 :

[Pointeur structure] char *nom


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Par défaut [Pointeur structure] char *nom
    Yo,

    Je rencontre un petit problème avec une structure et un pointeur.

    Voici mes structures :

    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
    typedef struct compagnie Compagnie;
    typedef struct cellule_compagnie Cellule_compagnie;
    typedef Cellule_compagnie *Liste_compagnie;
     
    struct compagnie
    {
      char *nom;
      char acronyme[3];
      Liste_avion avion_compagnie;
    };
     
    struct cellule_compagnie
    {
      Compagnie comp;
      struct cellule_compagnie* suivant;
    };
    Dans un fichiers de code, j'initialise la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Cellule_compagnie *initialisationCompagnie()
    {
      Cellule_compagnie *cellule = malloc(sizeof(*cellule));
      Liste_compagnie liste = malloc(sizeof(*liste));
    
      if(liste == NULL || cellule == NULL)
        exit(EXIT_FAILURE);
    
      cellule->comp.nom = 'A';
      cellule->suivant = NULL;
      liste = cellule;
    
      return liste;
    }
    La ligne rouge me pose problème, voici le message du shell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    In function ‘initialisationCompagnie’:
    gestion_liste_compagnie.c:22:21: attention : assignment makes pointer from integer without a cast [enabled by default]
    J'ai essayé quelques modifs de syntaxe mais ça me fait même des erreurs après, du cou je sais pas si c'est un bug ou qu'il y a vraiment un souci.

    Merci à vous et bonne soirée !

  2. #2
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Bonsoir,

    le problème est exactement ce que le compilateur te dit : tu donnes une valeur entière (le code ascii du caractère 'A') à une variable qui attend un pointeur, un char* en l’occurrence.
    'A' est un caractère, "A" est la chaîne composée du caractère 'A' suivi du 0 terminal. Je pense que tu voulais utiliser une chaîne plutôt qu'un caractère.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Par défaut
    Ah.

    En fait les structures sont ainsi et je ne peux les modifier.
    Donc si je te suis bien, le char *nom est en fait un char nom[], c'est bien ça ?
    Ah ben oui ce serait stupide sinon d'avoir le nom d'une compagnie qui ne fait qu'une lettre. Autant pour moi je n'ai pas suffisamment réfléchit.

    Merci de m'avoir éclaircit.

    Krieg

  4. #4
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Je t'en prie, mais attention aux différences entre un char* (allocation mémoire, pointeurs) et un char [] (tableau). Réfère toi aux tuto de base pour ne pas tomber dans les pièges traditionnels

    Bonne continuation.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Par défaut
    Par contre je n'arrive pas à écrire la bonne syntaxe. Du coup j'avais modifié en faisant ça :

    cellule->comp.nom[5] = "AB";
    Pourtant l'erreur est toujours présente.

    Je pense que je ne comprend pas quelque chose d'essentiel en fait.

  6. #6
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Pour faire court, cellule->comp.nom[5] permet d'accéder aux sixième caractère de la chaine cellule->comp.nom. Tu peux par exemple faire cellule->comp.nom="blabla" ...
    cf. Les chaines de caractères et tableaux et pointeurs en C.

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/12/2012, 19h02
  2. Réponses: 14
    Dernier message: 22/04/2006, 21h59
  3. Réponses: 12
    Dernier message: 03/01/2006, 17h23
  4. Pointeurs, Structures etc....
    Par kameha dans le forum C
    Réponses: 9
    Dernier message: 26/11/2005, 19h11
  5. Sizeof d'un pointeur sur char ...
    Par Mike888 dans le forum C
    Réponses: 8
    Dernier message: 03/11/2005, 13h04

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