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 :

Modification d'une strucutre depuis une fonction


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Modification d'une strucutre depuis une fonction
    Bonjour à tous,

    Je suis ici car j'ai besoin de modifier une structure depuis une fonction, j'arrive a envoyer l'adresse de ma structure a ma fonction a modifier cette structure dans la fonction, par contre lorsque j'affiche ma structure dans mon main j'obtiens un résultat que je ne comprend pas.

    Voici mon main:
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #include "structures.h"
    #include "bibli.h"
     
    //Emplacement du fichier de config. (Adresse absolue)
    #define EMPLACEMENT_CONFIG "/home/moi/Bureau/fichierConfig/config.txt"
     
    int main()
    {
        int i=0;
     
        FILE* config = NULL;
        StructAdresse adresseLu;
     
            //Ouverture du fichier de configuration pour tester l'adresse entré dans emplacement
        config = fopen(EMPLACEMENT_CONFIG, "r");
        if (config == NULL){
            printf("Erreur à l'ouverture du fichier de config\n\n");
            exit(EXIT_FAILURE);
        }
        fclose(config);
     
    //Lecture de l'adresse contenue dans le fichier de configuration
        lectureConfig(EMPLACEMENT_CONFIG, &adresseLu);
     
        printf("\n\tMAIN.C\n");
        printf("Adresse lu NOM : %s\n",adresseLu.nom);
        printf("Adresse lu num noeud : %s\n",adresseLu.num_Noeud);
        printf("Adresse lu adresse mac : %s\n",adresseLu.adresse_Mac);
        printf("Adresse lu adresse ip : %s\n",adresseLu.adresse_IP);
        printf("Adresse lu num udp : %s\n",adresseLu.num_UDP);
        printf("Adresse lu adresse buffer : %p\n\n",adresseLu.adresse_buffer);
     
        return 0
    }
    et voici la fonction appelé
    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
     
    void lectureConfig (char* emplacement, StructAdresse *adresseLu)
    {
        FILE* config = NULL;
     
        config = fopen(emplacement, "r");
        if (config == NULL){
            printf("Erreur à l'ouverture du fichier de config");
            exit(EXIT_FAILURE);
        }
     
    //Création des variables de réception des information contenue dans le fichier de config
        char nom[30];
        char num_Noeud[30];
        char adresse_Mac[30];
        char adresse_IP[30];
        char num_UDP[30];
        void* adresse_buffer;
     
    //Lecture du contenue du fichier config
        fscanf(config,"%s %s %s %s %s %p",nom,num_Noeud,adresse_Mac,adresse_IP,num_UDP,&adresse_buffer);
    //Mise à jour du carnet d'adresse interne
        adresseLu->nom = nom;
        adresseLu->num_Noeud = num_Noeud;
        adresseLu->adresse_Mac = adresse_Mac;
        adresseLu->adresse_IP = adresse_IP;
        adresseLu->num_UDP = num_UDP;
        adresseLu->adresse_buffer = adresse_buffer;
     
        printf("\n\tBIBLI.C\n");
        printf("Adresse à Temp NOM : %s\n",adresseLu->nom);
        printf("Adresse à Temp num noeud : %s\n",adresseLu->num_Noeud);
        printf("Adresse à Temp adresse mac : %s\n",adresseLu->adresse_Mac);
        printf("Adresse à Temp adresse ip : %s\n",adresseLu->adresse_IP);
        printf("Adresse à Temp num udp : %s\n",adresseLu->num_UDP);
        printf("Adresse à Temp adresse buffer : %p\n\n",adresseLu->adresse_buffer);
     
        fclose(config);
    }
    Lorsque j'affiche ma structure depuis Bibli.c j'obtiens bien le contenue de mon fichier config, par contre lorsque j'affiche le contenue de ma structure depuis le main je n'obtient plus la même choses.

    Je me demande donc d'où viens mon erreur. Car malgré mes nombreuses recherches je n'ai pas réussi à trouver la solution à mon problème.

    Merci pour vos pistes et votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu mets les adresses de variables locales dans ta structure. Tu dois copier le contenu de tes buffers si tu veux t'en servir hors de la fonction.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Oui en effet merci pour cette réponse rapide, sa m'a permit de résoudre mon problème

    Merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2015, 17h16
  2. Accès à une méthode d'une form depuis une autre autre form
    Par arngrimur dans le forum Windows Forms
    Réponses: 16
    Dernier message: 13/01/2012, 15h45
  3. Modifier une variable d'une classe depuis une autre classe
    Par Kezado dans le forum Général Java
    Réponses: 8
    Dernier message: 23/09/2010, 14h52
  4. [AC-2007] Copier une table depuis une base vers une autre
    Par Triton972 dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/11/2009, 19h27

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