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

GTK+ avec C & C++ Discussion :

gtk_window_get_title (Question sur)


Sujet :

GTK+ avec C & C++

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut gtk_window_get_title (Question sur)
    Bon voilà je débute sur GTK et j'ai fais ce petit exercise

    Faites un programme qui fait ceci lorsque on clique sur la croix :
    Ecrire le titre de la fenêtre dans la console, en inversant l'ordre des lettres !
    Quitter le programme.


    Voilà le code que j'ai obtenu la première fois :

    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
    #include <gtk/gtk.h>
    #include <stdlib.h>
    #include <string.h>
     
    void inverser_titre_quitter (GtkWidget *p_widget, gpointer data)
    {
     
       printf ("%s\n", strrev (gtk_window_get_title (GTK_WINDOW (p_widget))));
     
       gtk_main_quit ();
     
    }
     
    int main (int argc, char **argv)
    {
       GtkWidget *p_window = NULL;
     
       gtk_init (&argc, &argv);
     
       p_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
     
       gtk_window_set_title (GTK_WINDOW (p_window), "Tadili Saad");
     
       gtk_widget_show (p_window);
     
       g_signal_connect (G_OBJECT (p_window), "delete-event",
                         G_CALLBACK (inverser_titre_quitter), NULL);
     
       gtk_main ();
     
       return EXIT_SUCCESS;
    }
    Le compilateur me met le warning suivant :

    warning: passing arg 1 of `strrev' discards qualifiers from pointer target type|

    J'imagine que celà est du au fait que je modifie la chaine de caractere du widget n'est-ce pas ?

    donc j'ai modifier ma fonction pour obtenir le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void inverser_titre_quitter (GtkWidget *p_widget, gpointer data)
    {
       const gchar *p_tmp1 = gtk_window_get_title (GTK_WINDOW (p_widget));
       char *p_tmp2 = malloc (sizeof (strlen (p_tmp1) * *p_tmp2));
     
       strcpy (p_tmp2, p_tmp1);
     
       printf ("%s\n", strrev (p_tmp2));
       free (p_tmp2);
     
       gtk_main_quit ();
     
    }
    Et je me demande si il y a pas une meilleure méthode, aussi quand je déclare p_tmp1 juste en mettant char *p_tmp1 j'ai un warning

    warning: initialization discards qualifiers from pointer target type

    J'ai donc mis :

    const gchar *p_tmp1

    ça marche mais je sais pas si c'est correct, et si tel est le cas pourquoi on est obligé de faire ça.

    et surtout ça veut dire quoi ce warning que j'ai jamais eu avant :

    initialization discards qualifiers from pointer target type

    Merci

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    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
    #include <gtk/gtk.h>
    #include <glib/gprintf.h>
     
    void inverser_titre_quitter (GtkWidget * p_widget, gpointer data);
     
    int main (int argc, char **argv)
    {
       gtk_init (&argc, &argv);
     
       GtkWidget *p_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
     
       gtk_window_set_title (GTK_WINDOW (p_window), "Tadili Saad");
     
       g_signal_connect (G_OBJECT (p_window), "delete-event",
                         G_CALLBACK (inverser_titre_quitter), NULL);
     
       gtk_widget_show (p_window);
       gtk_main ();
       return 0;
    }
     
    void inverser_titre_quitter (GtkWidget * p_widget, gpointer data)
    {
       gchar *temp;
       g_printf (temp =
                 g_utf8_strreverse (gtk_window_get_title (GTK_WINDOW (p_widget)),
                                    -1));
       g_free (temp), temp = NULL;
       gtk_main_quit ();
    }

  3. #3
    Membre Expert
    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
    Par défaut
    Le warning est la parce que la fonction renvoie un const char * et que toi tu le convertis en char *, le compilateur t'avertit parce que tu risques de modifier une valeur supposee etre constante en faisant cette conversion.
    Pour recopier une chaine comme tu le faisais dans ton exemple, il existe la fonction g_strdup qui t'evite de faire el malloc, calculer la taille et faire la copie toi meme.

    Nico, dans ton exemple il faut faire
    g_printf ("%s", temp =
    g_utf8_strreverse (gtk_window_get_title (GTK_WINDOW (p_widget)),
    -1));
    Enfin c'est encore mieux de faire le temp = ...., mais la le "%s" est super important.... Sinon le jour ou t'as une fenetre dont le titre est "%s%o%x" il va se passer des choses bizarres dans ton programme je pense.

  4. #4
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Oui je connais cette faille mais dans la mesure ou c'est le programmeur qui est maître du titre de la fenêtre ça n'est pas nécessaire.

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Oups désolé j'ai pas vu que ce message avait eu des réponses (j'avais laisser tomber mon projet gtk+ durant les exams), effectivement g_strdup marche très bien. Merci

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

Discussions similaires

  1. [debutant] Questions sur 1 futur projet
    Par cyrull22 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/04/2003, 21h49
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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