GTK - Caractères bizares

GTK - Caractères bizares - C - Programmation

Marsh Posté le 18-09-2008 à 14:14:54    

Bonjour,  
 
J'ai commencé GTK il n'y a pas longtemps, et je suis actuellement bloqué sur un problème de caractères bizzares.
Dans une fénêtre, je demande à l'utilisateur de rentrer une chaîne de caractère (d'une taille max que je définis), j'utilise un signal pour récupérer cette chaîne lorsque ce dernier tape sur "Enter".
Je récupére la chaîne de caractères dans la fonction callback avec :
chaine=gtk_entry_get_text(GTK_ENTRY(pEntry));
(sachant que chaine a bien été définie, malloc etc, et les cast sont ok).
Le problème : quand la chaîne de l'utilisateur est strictement inférieure à la taille max (ce qui arrive tout le temps...), je retrouve dans ma chaîne, des caractères bizarres (des carrés, des @, ...).  
 
Ex : je rentre "coucou" dans la fenêtre, je fais "Enter", et je récupère comme chaîne coucou @? Ї?h??M??  
 
Je me doute que cela vient du fait que il peut y avoir n'importe quoi comme caractères après le coucou parce que ya pas eu d'initialisation, mais comment est-ce qu'on peut initialiser en mettant des espaces dans toutes les cases, gtk_entry_get_text(GTK_ENTRY(pEntry)) ???
 
Merci pour votre aide

Reply

Marsh Posté le 18-09-2008 à 14:14:54   

Reply

Marsh Posté le 18-09-2008 à 14:15:47    

t'as bien un '\0' à la fin de ta chaine ?

Reply

Marsh Posté le 18-09-2008 à 14:29:24    

Oui, quand j'ai initialisé chaine en mettant des espaces partout, j'ai mis un '\0' dans la dernière case.  
Et une fois que je récupére la chaine, ce sont toutes les cases qui viennent après "coucou" jusqu'à la dernière qui sont polluées.

Reply

Marsh Posté le 18-09-2008 à 15:02:19    

tu récupéres comment ta chaine ?

Reply

Marsh Posté le 18-09-2008 à 15:13:43    

chaine = (char*) gtk_entry_get_text(GTK_ENTRY(pEntry));
 
avec pEntry un argument de ma fonction Callback (un GtkWidget *).
 
A noter que pour l'instant, la seule solution que j'ai trouvé, c'est de compléter par des espaces mes chaines lors des saisies pour atteindre la taille max.

Reply

Marsh Posté le 18-09-2008 à 15:38:05    

bon GTK me dit :
 

Citation :


Returns :
 a pointer to the contents of the widget as a string. This string points to internally allocated storage in the widget and must not be freed, modified or stored.  


 
Donc moi je ferais un strcpy au lieu d'un cast moche en char* :o

Reply

Marsh Posté le 18-09-2008 à 15:51:23    

salut, il est marque ceci dans leur doc au sujet de gtk_entry_get_text :
 
http://library.gnome.org/devel/gtk [...] y-get-text
"This string points to internally allocated storage in the widget and must not be freed, modified or stored. "
 
Après, je vois une fonction gtk_entry_get_text_length (), du coups est-ce qu'un  
 

Code :
  1. gchar *mon_texte, *ret;
  2. uint longueur=0;
  3. ret=gtk_entry_get_text(GTK_ENTRY(pEntry));
  4. if (ret!=NULL)
  5. {
  6.   longeur=gtk_entry_get_text_length (pEntry);
  7.   if ((mon_texte=malloc(longueur*sizeof(gchar)))!=NULL)
  8.   {
  9.     memclr(mon_texte,longueur);
  10.     memcpy(mon_texte,ret,longueur);
  11.   }
  12.   else
  13.   {
  14.    //erreur malloc
  15.   }
  16. }
  17. else
  18. {
  19.   //saisie vide
  20. }


Reply

Marsh Posté le 18-09-2008 à 15:52:09    

incredible !
ce cast était si mal propre que ça !?
Merci :)

Reply

Marsh Posté le 18-09-2008 à 15:53:17    

le strcpy de Joel semble résoudre définitivement le pb

Reply

Marsh Posté le 18-09-2008 à 17:47:09    

sinon tu fais un simple g_strdup et voilà ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed