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 :

bug GTK -> glib


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    dessinateur projeteur VRD
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : dessinateur projeteur VRD
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Par défaut bug GTK -> glib
    Voici mon petit programme que je développe pour apprendre le c et GTK
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    # include <stdlib.h>
    # include <gtk/gtk.h>
    /* variale pour les widgets GTK */
       GtkWidget *fenprin;
       gchar *texte_mois;
       int icone, i;
       float montant, interet;
       const char *fin;
       const char *zone_text_montant;
       const char *zone_text_interet;
       GtkWidget *vconteneur;
       GtkWidget *hconteneur_1;
       GtkWidget *hconteneur_2;
       GtkWidget *separation;
       GtkWidget *labelzonemontant;
       GtkWidget *zonemontant;
       GtkWidget *labelzoneinteret;
       GtkWidget *zoneinteret;
       GtkWidget *calculbtn;
       GtkWidget *label_mois;
       GtkWidget *label_ancienne_solde;
     
    /* fonction de calcul */
    void calcul(GtkWidget *widget, gpointer data)
    {
       // récupére l'information de la zone de saisie zone montant 
       // et zone interet
       zone_text_montant = gtk_entry_get_text(GTK_ENTRY(zonemontant));
       zone_text_interet = gtk_entry_get_text(GTK_ENTRY(zoneinteret));
       // transformation chaine de caractère en chaine numérique
       // fonction atoi => ascii to int 
       montant = atof(zone_text_montant);
       // transformation chaine de caractère en chaine numérique 
       // fonction atof => ascii to float 
       interet = atof(zone_text_interet);
       for (i = 0;i < 12; i++)
       {
          /* transformation chaine numérique en chaine de caractère */
          //sprintf(resultat,"%.2f",montant*(interet/12));
       }
       g_sprintf(fin,"%.2f",interet);
       gtk_label_set_label(GTK_LABEL(label_ancienne_solde), fin);
    }
     
    int main (int argc,char **argv )
    {
       /* initialisation de GTK */
       gtk_init(&argc, &argv);
     
       /* création de la fenêtre */
       fenprin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       icone = gtk_window_set_icon_from_file(GTK_WINDOW(fenprin),"placement.ico",NULL);
       gtk_window_set_title(GTK_WINDOW(fenprin),"- Calcul de votre placement -");
       gtk_window_set_default_size(GTK_WINDOW(fenprin),500,400);
     
       /* conteneur vertical */
       vconteneur = gtk_vbox_new(FALSE, 0 );
       gtk_container_add(GTK_CONTAINER(fenprin), vconteneur);
     
       /* 1er conteneur horizontal pour les boutons*/
       hconteneur_1 = gtk_hbox_new(FALSE, 0 );
       gtk_box_pack_start ( GTK_BOX(vconteneur),hconteneur_1, FALSE,FALSE,0);   
     
       /* Bar horizontale de séparation */
       separation = gtk_hseparator_new();
       gtk_box_pack_start ( GTK_BOX(vconteneur),separation, FALSE,FALSE,0);   
     
       /* création du label de la première zone de saisie */
       labelzonemontant = gtk_label_new("Montant :");
       gtk_box_pack_start ( GTK_BOX(hconteneur_1),labelzonemontant,FALSE,FALSE,0); 
     
       /* création de la première zone de saisie */
       zonemontant = gtk_entry_new();
       gtk_entry_set_max_length(GTK_ENTRY(zonemontant),9);
       gtk_widget_set_size_request(zonemontant,85,25);
       gtk_box_pack_start ( GTK_BOX(hconteneur_1),zonemontant,FALSE,FALSE,0); 
     
       /* création du label de la seconde zone de saisie */
       labelzoneinteret = gtk_label_new(" (euros)  -  Intéret :");
       gtk_box_pack_start ( GTK_BOX(hconteneur_1),labelzoneinteret,FALSE,FALSE,0); 
     
       /* création de la seconde zone de saisie */
       zoneinteret = gtk_entry_new();
       gtk_entry_set_max_length(GTK_ENTRY(zoneinteret),3);
       gtk_widget_set_size_request(zoneinteret,85,25);
       gtk_box_pack_start ( GTK_BOX(hconteneur_1),zoneinteret,FALSE,FALSE,0); 
     
       /* création du bouton */
       calculbtn = gtk_button_new_with_label("Valider");
       gtk_widget_set_size_request(calculbtn,85,25);
       gtk_box_pack_end ( GTK_BOX(hconteneur_1),calculbtn,FALSE,FALSE,0); 
       g_signal_connect(G_OBJECT(calculbtn), "clicked", G_CALLBACK(calcul), NULL);
     
       /* signal d'arrêt du programme */
       g_signal_connect(G_OBJECT(fenprin), "delete-event",G_CALLBACK(gtk_main_quit), NULL);
     
       /* 2ème conteneur horizontal pour les labels*/
       hconteneur_2 = gtk_hbox_new(FALSE, 0 );
       gtk_box_pack_start ( GTK_BOX(vconteneur),hconteneur_2, FALSE,FALSE,0);   
     
       /* création du label qui affiche les mois */
       texte_mois = "- Mois/Année -\n\n Janvier\n Février\n Mars\n "
                    "Avril\n Mai\n Juin\n Juillet\n Août\n Septembre\n"
                    "Octobre\n Novembre\n Décembre";
       label_mois = gtk_label_new(texte_mois);
       gtk_label_set_justify(GTK_LABEL(label_mois),GTK_JUSTIFY_CENTER);
       gtk_box_pack_start ( GTK_BOX(hconteneur_2),label_mois,FALSE,FALSE,0); 
     
       /* création du label qui affiche les anciennes soldes */
       label_ancienne_solde = gtk_label_new("- Ancienne solde -\n\n 1111 ");
       gtk_label_set_justify(GTK_LABEL(label_ancienne_solde),GTK_JUSTIFY_CENTER);
       gtk_box_pack_start ( GTK_BOX(hconteneur_2),label_ancienne_solde,FALSE,FALSE,0); 
     
       /* boucle évènementielle */
       gtk_widget_show_all(fenprin);
       gtk_main();
     
       return EXIT_SUCCESS;
    }
    j'ai cette erreur :
    GLib-CRITICAL **: g_vsprintf: assertion `string != NULL' failed
    si quelqu'un peut m'expliquer le problème ?
    c'est assez difficile de travailler avec les GTK_entry, quand on manipule des chiffres..

  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
       g_sprintf(fin,"%.2f",interet);
    Qui a alloué de la mémoire pour fin ?
    Apparemment personne et fin == NULL (déclaré en global).

    ----------------------------
    [Edit]
    Je précise :
    fin est un pointeur initialisé à NULL. Or pour stocker le résultat de la conversion de interet en chaine de caractères, il faut un tableau de caractères (suffisamment grand).

    Autrement dit il faut avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char fin [....] // avec une dimension suffisante
    // ou
    char * fin = malloc(....) //

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/10/2012, 20h37
  2. [Ruby] Boucles Gtk et GLib
    Par vinc-mai dans le forum GTK+
    Réponses: 4
    Dernier message: 23/12/2009, 16h03
  3. Impossible d'installer GTK-2.11.6 à cause de la GLIB
    Par nicolas.sitbon dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 15/08/2007, 16h49
  4. Réponses: 4
    Dernier message: 15/08/2007, 16h47
  5. Bug d'affichage d'item et lenteur de GTK sous Vista
    Par Acivurt dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 12/08/2007, 15h50

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