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

Bibliothèque standard C Discussion :

assigner une valeur a un type void *


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 70
    Par défaut assigner une valeur a un type void *
    Bonjour,

    Dans le cadre d'un parseur de configuration, je cherche a assigner des valeurs a un type void *, seulement j'ai un problème avec le type int, je ne peux récuperer que des valeur de -128 à 127.

    ici tmp pointe sur une chaine, "256000" par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    (*var)->value[j] = malloc(sizeof(int));
     
    *(*var)->value[j] = atoi(tmp);
     
    printf("%i\n", atoi(tmp));
    ...
    La valeur stockée sera tronquée et ici me donne 0, par contre le printf me donne bien les 256000.
    Je n'ai pas trop de solution, et j'avoue que je me tente un peu avec le void *, donc je parie qu'il y a u truc que je n'ai pas compris.

    Merci d'avance

  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
    Quelle est la déclaration du type de (*var)->value[j] ?
    int * ou char * ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 70
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef struct
    {
    	char * name; // Variable name
    	unsigned int vCnt; // Values count
    	unsigned int * type;
    	void * * value; // Variable values
    } cnfVar_t;
    voici la structure, mais je me suis rendu compte entre temps que j'avais laissé un char * * value, au lieu de void * * value, d'un précédent test...

    Ce qui en resulte carrément a des erreurs à la compilation maintenant...

    Donc pour faire court, je stock simplement le nombre de valeur pour une variable. J'en connais le nombre avec vCnt, j'ai un tableau de type (int), et un tableau de (void *)

    Je ne sais juste pas cmt on "force" un type au pointeur (void *).

    Plus simplement, j'aimerais pouvoir faire ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	void * a = NULL;
     
    	a = malloc(sizeof(int));
    	*a = 354;
     
    	printf("%i", *a);
    Seulement il marque "warning deferencing void *"

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par le_ptit_lutin Voir le message
    Seulement il marque "warning deferencing void *"
    Et c'est normal

    Une manière un peu crade, c'est de créer un pointeur int * temporaire (mais c'est vraiment crade et tu as intérêt à savoir ce que tu fais)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	void * a = NULL;
     
    	a = malloc(sizeof(int));
     
    	int *tmp_int = (int *)a;
    	*tmp_int = 354;
     
    	printf("%i", *tmp_int);
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    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
    à mon avis la manière la plus raisonnable est dans l'autre sens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	int * a = NULL;
    	void *b ;
     
    	a = malloc(sizeof(int));
            b = a ; /* ou b = (void *)a; */
     
    	*a = 354;
     
    	printf("%i", *a);

  6. #6
    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
    Je ne sais juste pas cmt on "force" un type au pointeur (void *).
    Comme pour tout autre type de donnée : par l'opérateur de cast (transtypage). Mais il ne faut pas se tromper dans le nouveau type !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void * a = ....;
    ....
     //  (int*)a donne une adresse dont le type est int *
    * (int*)a = 12345;

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/03/2013, 09h41
  2. [Débutant] Assigner une valeur à un char
    Par dib258 dans le forum C
    Réponses: 4
    Dernier message: 06/12/2005, 10h56
  3. Affecter une valeur à un input type="file" ?
    Par rocs dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/08/2005, 11h10
  4. Affecter une valeur à un input type text
    Par mr.t dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/06/2005, 15h18
  5. Réponses: 27
    Dernier message: 30/03/2005, 23h30

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