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 : 42
    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 : 42
    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