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 :

Problème d'affectation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 21
    Par défaut Problème d'affectation
    salut à tous
    Je travaille à present sur les structures et j'ai rencontré un petit problème.
    Mon programme consiste à créer une structure, enduite une variable du type de ma structure, puis l'initialiser avec une fonction.
    Pour cela j'ai utilisé les pointeurs. Mais lors de la compilation, mon compilateur [gcc sous linux], me donne l'erreur :26: error: incompatible types in assignment.
    Ce qui veux dire, je crois, que qu'il y a un problème avec les types de variables.
    Voici mon code source :

    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
    #include<stdio.h> 
    #include<string.h> 
     
     
    typedef struct Info_perso Info_perso; 
    struct Info_perso 
    	{ 
    	char nom[100]; 
    	char prenom[100]; 
    	int age; 
    	}; 
     
    void initialiser(Info_perso* pointeur_mehdi); 
    int main() 
    { 
     
    Info_perso mehdi; 
    initialiser(&mehdi); 
    printf("Nom: %s\nPrénom: %s\nAge: %d", mehdi.nom, mehdi.prenom, mehdi.age); 
     
    return 0; 
    } 
     
    void initialiser(Info_perso* pointeur_mehdi) 
    { 
    (*pointeur_mehdi).nom = ""; 
    (*pointeur_mehdi).prenom = ""; 
    (*pointeur_mehdi).age = 0; 
    }

    Merci d'avance pous vos explications.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    plusieurs choses :

    • Inclure <stdlib.h>
    • Ensuite, comme tu n'as pas mis de typedef à la structure, il faut à chaque fois mentionner "struct Info_perso" ...

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 21
    Par défaut
    Citation Envoyé par souviron34
    [*]Ensuite, comme tu n'as pas mis de typedef à la structure, il faut à chaque fois mentionner "struct Info_perso" ...[/LIST]
    Si... j'ais mis typedef. Sauf si ce n'est pas comme cela qu'il faut le mettre
    j'ai inclus stdlib mais ca ne change rien ...

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    mais en plus tu n'as pas compris pointeurs et non-pointeurs sur une structure...

    Quand tu as une structure, tu fais :

    mastruct.champ

    pour accéder au champ.

    Quand c'est le pointeur, tu fais :

    mastruct->champ.

    Maintenant, quand tu passes un pointeur dans une fonction, cela veut dire 2 choses :

    Quand c'est une variable, celle signifie qu'elle sera modifiée, et dans la fonction il faudra que tu gères le CONTENU du pointeur.

    Tu auras donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void Fonction ( int *i )
    {
       *i = *i + 1 ;
    }
     
    int main ( void )
    {
    int i=0 ;
     
    Fonction(&i) ;
    }
    Maintenant, quand c'est une structure ou un tableau, ce que tu passes en mettant un pointeur c'est l'adresse de la structure, mais tu ne vas pas modifier LA STRUCTURE, mais son contenu.

    Donc dans ce cas tu auras :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pointeur_mehdi->nom = "";

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 21
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void initialiser(Info_perso* pointeur_mehdi)
    {
    	pointeur_mehdi->nom = "";
    	pointeur_mehdi->prenom = "";
    	pointeur_mehdi->age = 0;
    }
    le problème persiste encore, je croi qu'il est due à un conflit quand il convertis les types de variables dans les lignes 26 et 27

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    j'avais pas vu, je croyais que c'était des pointeurs..

    ENCORE UNE FOIS....

    Une chaîne ne s'initialise pas avec le signe = .

    Ce sera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy ( pointeur_mehdi->nom, "" );
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	pointeur_mehdi->nom[0] = '\0' ;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème d'affectation
    Par Nelmo dans le forum MFC
    Réponses: 8
    Dernier message: 04/05/2006, 14h29
  2. Réponses: 3
    Dernier message: 04/04/2006, 09h39
  3. Problème d'affectation de variable
    Par bob33 dans le forum C
    Réponses: 3
    Dernier message: 04/11/2005, 17h01
  4. problème d'affectation de tableau ...
    Par Mike888 dans le forum C
    Réponses: 23
    Dernier message: 26/02/2005, 14h52
  5. Entier 64 bits sous linux, problème d'affectation
    Par Steki-kun dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2005, 21h10

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