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 pour modifier une fonction


Sujet :

C

  1. #1
    Membre habitué Avatar de condor_01
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    294
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 294
    Points : 133
    Points
    133
    Par défaut Problème pour modifier une fonction
    Bonjour,
    Avant tout je veux vous dire que je n'ai jamais utilisé la Glib.
    En fait, j'ai une fonction dont la définition est la suivante :
    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
    gboolean get_param_positive_double(struct call *c, GData *param, GQuark name, gdouble *value, GError **error) {
        gchar *data, *endptr;
     
        if (!(data = g_datalist_id_get_data(&param, name))) {
            goto missing;
        }
     
        if (!strcmp(data, "random")) {
            *value = g_rand_double(get_rand());
        } else {
            *value = g_ascii_strtod(data, &endptr);
            if (data == endptr) {
                goto baddata;
            }
            if (*value < 0) {
                set_config_error(error, c, name, CONFIG_ERROR_BADDATA, "positive double value (%lf) is negative", *value);
                goto error;
            }
        }
     
        return TRUE;
     
     missing:
        set_config_error(error, c, name, CONFIG_ERROR_MISSING, NULL);
        goto error;
     
     baddata:
        set_config_error(error, c, name, CONFIG_ERROR_BADDATA, NULL);
        goto error;
     
     error:
        return FALSE;
    }
    D'près ce que j'ai compris, cette fonction prend la valeur (double) d'un type spécifié dans un fichier XML.

    Ce que je veux faire c'est de programmer une fonction qui prend une chaine de caractère spécifique.

    voila ce que j'ai écrit, mais ça ne marche pas :

    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
    gboolean get_param_string(struct call *c, GData *param, GQuark name, gchar *value, GError **error) {
     
        if (!(value = g_datalist_id_get_data(&param, name))) {
            goto missing;
        }    
     
        return TRUE;
     
     missing:
        set_config_error(error, c, name, CONFIG_ERROR_MISSING, NULL);
        goto error;
     
     error:
        return FALSE;
    }
    Pourriez vous m'aider SVP

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Tu peux être un peu plus précis sur ton "ça ne marche pas" ? Ta fonction a quel comportement ? Et t'aimerais bien quel (autre) comportement ?

  3. #3
    Membre habitué Avatar de condor_01
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    294
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 294
    Points : 133
    Points
    133
    Par défaut
    Bon voila ma fonction
    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
    gboolean get_param_string(struct call *c, GData *param, GQuark name, char *value, GError **error) {      
        if (!(value = g_datalist_id_get_data(&param, name))) {
            goto missing;
        }
        printf("%s\n",value);  
     
        return TRUE;
     
     missing:
        set_config_error(error, c, name, CONFIG_ERROR_MISSING, NULL);
        goto error;
     
     error:
        return FALSE;
    }
    En fait, cette fonction me permet d'extraire une chaine dans un fichier XML.
    J'ai appelé cette fonction dans mon programme avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    get_param_string(c, param, g_quark_from_static_string("file"), file_name, error)
    avec file_name de type char*

    le problème c'est que l'affichage de file_name se fait dans le corps de la fonction.
    Alors que quand je veux l'afficher dans mon programme principal ça ne marche pas.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Ah oui, ça n'a rien à voir avec du gtk+ par contre

    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
     
    void alloc (char *ptr)
    {
        ptr = malloc (10);
        printf ("inside alloc %p\n", ptr);
    }
     
    int main (int argc, char **argv)
    {
        char *toto = NULL;
     
        printf ("before alloc %p\n", toto);
        alloc (toto);
        printf ("after alloc %p\n", toto);
    }
    tu te trouves exactement dans ce cas là avec ton paramètre value si je ne m'abuse. Ie les arguments d'une fonction C sont copiés, ils ne sont pas modifiables directement

  5. #5
    Membre habitué Avatar de condor_01
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    294
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 294
    Points : 133
    Points
    133
    Par défaut
    J'ai pas bien compris.
    Comment je peux corriger mon programme ?

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    Citation Envoyé par condor_01 Voir le message
    J'ai pas bien compris.
    Comment je peux corriger mon programme ?
    Il faut revoir le passage de paramètre en C

Discussions similaires

  1. Problème pour modifier une variable globale
    Par supertom dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 07/06/2007, 18h00
  2. Problème pour modifier une View
    Par lilo415 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/05/2007, 14h19
  3. Problème pour tracer une fonction créneau
    Par Erzvinh dans le forum MATLAB
    Réponses: 8
    Dernier message: 02/02/2007, 16h53
  4. Réponses: 7
    Dernier message: 10/09/2005, 16h49
  5. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 11h30

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