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 :

Probleme avec un GTK_Entry


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 37
    Par défaut Probleme avec un GTK_Entry
    Bonjour,

    j'ai un problème que je comprends absolument pas lié à mon GTK_Entry.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     text = gtk_entry_get_text(GTK_ENTRY(entry1));
     aux = gtk_entry_get_text(GTK_ENTRY(entry2));
     strcat (text,aux);
     strcat (text,".txt");
    Jusque là tout marche, cela me renvoie un nom de fichier texte.

    Mais le problème est que lorsque je refais un get_text pour mon entry1, et bien ce qu'il y avait dedans a changé, ce n'est plus le texte que j'avais tapé dans le entry, mais le texte présent dans la variable text.

    Exemple :
    entry1 : Salut
    entry2 : Bonjour

    après le code, dans la variable text il y a : "SalutBonjour.txt".

    Lorsque j'essaie de voir ce qu'il y a dans le entry1, je trouve "Salut Bonjour.txt"....

    Je ne vois pas du tout d'où ça vient.

    Quelqu'un pour m'aider please.
    Merci d 'avance.

    EDIT : Déclaration des variabales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     const gchar * text;
     const gchar * aux;

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Ainsi qu'il est écrit dans la ref de GTK+ sur le GtkEntry:
    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.
    En d'autres termes, il te faut créer une nouvelle chaîne faisant au minimum la taille totale de ta future chaîne complète + 1 pour le zéro final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    gchar * str = g_malloc (strlen (text) + strlen (aux) + 1);
     
    if (str != NULL)
    {
       sprintf ("%s%s.txt", text, aux);
    }
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 37
    Par défaut
    Merci pour ta réponse rapide.

    Donc ça donnerait ça avec la nouvelle variable ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const gchar * text;
    const gchar * aux;
    gchar * contact; 
     
    text = gtk_entry_get_text(GTK_ENTRY(entry1));
    aux = gtk_entry_get_text(GTK_ENTRY(entry2));
    str = g_malloc (strlen (text) + strlen (aux) + 1);
     
     if (str != NULL)
        {
        str = sprintf ("%s %s.txt", text, aux);
        }
    On aurait alors dans str = "%s %s.txt" et le entry1 serait inchangé ?

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par fomblardo
    Merci pour ta réponse rapide.

    Donc ça donnerait ça avec la nouvelle variable ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const gchar * text;
    const gchar * aux;
    gchar * contact; 
     
    text = gtk_entry_get_text(GTK_ENTRY(entry1));
    aux = gtk_entry_get_text(GTK_ENTRY(entry2));
    str = g_malloc (strlen (text) + strlen (aux) + 1);
     
     if (str != NULL)
        {
        str = sprintf ("%s %s.txt", text, aux);
        }
    On aurait alors dans str = "%s %s.txt" et le entry1 serait inchangé ?
    Oui sauf que je me suis juste trompé dans l'utilisation de sprintf, j'ai oublié le premier argument ce qui nous donne alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const gchar * text;
    const gchar * aux;
    gchar * contact; 
     
    text = gtk_entry_get_text(GTK_ENTRY(entry1));
    aux = gtk_entry_get_text(GTK_ENTRY(entry2));
    str = g_malloc (strlen (text) + strlen (aux) + 1);
     
    if (str != NULL)
    {
       sprintf (str, "%s %s.txt", text, aux);
    }
    On aurait alors dans str = "%s %s.txt" et le entry1 serait inchangé
    En réalité, les deux GtkEntry restent inchangés !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 37
    Par défaut
    Ok merci beacoup à vous deux, j'ai fait un mix des 2 fonctions (sprintf , gstrdup) et ça marche impec

    Un grand merci

  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
    Par défaut
    Citation Envoyé par Franck.H
    Ainsi qu'il est écrit dans la ref de GTK+ sur le GtkEntry:

    En d'autres termes, il te faut créer une nouvelle chaîne faisant au minimum la taille totale de ta future chaîne complète + 1 pour le zéro final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    gchar * str = g_malloc (strlen (text) + strlen (aux) + 1);
     
    if (str != NULL)
    {
       sprintf ("%s%s.txt", text, aux);
    }
    g_strdup est fait pour ça

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par gege2061
    g_strdup est fait pour ça
    Certes mais ca ne créé qu'une copie de la chaîne alors que là il s'agit de faire une concaténation de chaînes, je pense que c'est inutile de faire une copie de chaque chaînes pour ensuite faire une concaténation dans un nouvelle, etc...
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    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
    Par défaut
    Citation Envoyé par Franck.H
    Certes mais ca ne créé qu'une copie de la chaîne alors que là il s'agit de faire une concaténation de chaînes, je pense que c'est inutile de faire une copie de chaque chaînes pour ensuite faire une concaténation dans un nouvelle, etc...
    Dans ce cas g_strdup_printf

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par gege2061
    Dans ce cas g_strdup_printf
    Ouais ca c'est une solution, j'y avais pas pensé
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

Discussions similaires

  1. petit probleme avec un gtk_entry
    Par dedepsg dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 09/06/2007, 10h14
  2. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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