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 :

Lecture d'un élément de structure [Débutant(e)]


Sujet :

C

  1. #1
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut Lecture d'un élément de structure
    J'ai un code dans lequel l'élément de structure pointé par pData doit contenir la valeur (int ou long) 1

    la structure (liste chainée) dans un fichier header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct HWMCA_DATATYPE_S {       
       UCHAR                 ucType;
        ULONG                 ulLength;
        PVOID                 pData;   
        struct HWMCA_DATATYPE_S *pNext;
     };     
    typedef struct HWMCA_DATATYPE_S HWMCA_DATATYPE_T;
    Pour exemple (le code n'est pas complet)
    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
     
    #include <stdlib.h>  
    #include <stdio.h> 
    #include <string.h>
    #include <memory.h>  
    #include "header.h"
    int main(int argc, char *argv[], char *envp[]) 
    {  
    int j,i;
    ULONG               aulCmdData[10];                                          
    HWMCA_DATATYPE_T    aHwmcaDataType[10];
    for (i=5, j=0; (((i+2) <= argc) && (j < 10)); i+=2, j++) {
       memset(&aHwmcaDataType[j],'\0',HWMCA_DATATYPE_SIZE);   
       aHwmcaDataType[j].pNext = &(aHwmcaDataType[j+1]);      
       aHwmcaDataType[j].ucType = (UCHAR)atoi(argv[i]);
       aHwmcaDataType[j].ulLength = sizeof(short int);
       aulCmdData[j] = atol(argv[i+1]);
       aHwmcaDataType[j].pData    = &aulCmdData[j];
       }
    return(0);
    }
    argv[i+1] étant "1"
    J'arrive à afficher l'ensemble du contenu des éléments de la structure SAUF pour celui pointé par pData.
    J'ai essayé bon nombre de printf() dans tout les sens (même ce qui me semblait incorrecte) mais en résultat j'ai toujours soit rien du tout soit un affichage non conforme)
    je ne suis jamais arrivé à avoir : 1
    j'ai essayé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("aHwmcaDataType[%d].pData :%ld",j,aHwmcaDataType[j].pData);
    sans plus de succès......
    Qu'est ce que j'ai loupé ?

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("aHwmcaDataType[%d].pData :%ld",j,aHwmcaDataType[j].pData);
    tente d'afficher la valeur du pointeur -----.pData, pas la valeur pointée (aulCmdData[j]) . Il faudrait déréférencer ce pointeur. Comme il est de type void * , ceci demandera un transtypage préalable du pointeur.

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par SPACHFR Voir le message
    J'ai un code dans lequel l'élément de structure pointé par pData doit contenir la valeur (int ou long) 1

    la structure (liste chainée) dans un fichier header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct HWMCA_DATATYPE_S {       
        PVOID                 pData;   
    <...>
     
     };
    J'arrive à afficher l'ensemble du contenu des éléments de la structure SAUF pour celui pointé par pData.
    pData est un void *. Il s'affiche avec un "%p" et tu auras simplement l'adresse, ce qui n'est pas très significatif.

    Si l'adresse est celle d'un long, pour afficher la valeur, il faut soit utiliser un cast (lourdingue, je ne montre pas), soit un pointeur intermédiaire du bon type (le plus simple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       {
          long *pi = aHwmcaDataType[j].pData;
          printf ("aHwmcaDataType[%d].pData :%ld", j, *pi);
       }

  4. #4
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut
    Merci de vos réponses, je vais utiliser la méthode du pointeur intermédiaire.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/03/2014, 13h31
  2. Incrémentation d'un élément de structure : erreur de segmentation
    Par BOByTOX dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 27/04/2011, 18h37
  3. Lecture/écriture fichier binaire via structure
    Par Tenebrous dans le forum C
    Réponses: 9
    Dernier message: 07/03/2010, 00h02
  4. lecture fichier texte pointeur et structure
    Par shermav dans le forum C
    Réponses: 8
    Dernier message: 13/04/2007, 23h44
  5. lecture d'éléments dans mon fichier
    Par gillou4 dans le forum C
    Réponses: 9
    Dernier message: 23/10/2005, 16h19

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