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 :

chaines de caractères en GTK+


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut chaines de caractères en GTK+
    Bonjour,

    je n'arrive pas a mettre la main sur la fonction en C ( peut-être incluse dans GTK+), qui me permettra de comparer 2 chaines de caractères en const gchar*.

    J'ai essayer toutes les méthodes que je connaissais de l'allocation directe (...), caster en gchar*, et les fonctions strcmp et strcpy, qui me retourne un beau plantage windows sans erreurs de compilation.

    Je commence à manquer d'idée surtout que je sens que la réponse est une fonction qui m'est inconnu ( j'ai d'ailleur chercher dans les differents tutos et articles du forum ).

    Merci de votre aide

    zakos

  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
    Le type gchar n'est qu'un alias du type char donc on utilise tout simplement les fonctions que tu as déjà cité : strcmp, strncmp...
    Après si tu as des erreurs, poste ton code.
    Cordialement.

  3. #3
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Euh ça fonctionne pas avec strcmp ?

    C'est bizarre quand même, m'est avis que le problème ne vient pas de là.

  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
    Citation Envoyé par Skyrunner Voir le message
    Euh ça fonctionne pas avec strcmp ?
    Pourquoi ça ne fonctionnerai pas?

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Pourquoi ça ne fonctionnerai pas?
    Ben c'est ce que dit le P.O, donc je demande une confirmation.

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Il faut voir le code.

  7. #7
    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
    Le P.O?

  8. #8
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Le P.O?
    Le posteur original.

  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 zakos Voir le message
    J'ai essayer toutes les méthodes que je connaissais de l'allocation directe (...), caster en gchar*, et les fonctions strcmp et strcpy, qui me retourne un beau plantage windows sans erreurs de compilation.
    Nullement besoin de cast ou autres fioritures, un gchar n'est qu'un char et la fonction strcmp ou bien strncmp ou même encore memcmp fonctionnent très bien ! Surement de mémoire, allocation dynamique des chaînes par exemple ou problème dans le passage des arguments.

    Faut voir du code !
    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 !

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut
    voici le code condensé que je souhaite utiliser ( enfin une de tte les versions que j'ai essayer ) :

    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
     
    #include <string.h>
     
    int main
    {
     
             // on a un tableau de bouton bouton[8][8]. Je veux associer a ce tableau un tableau chaine de caratere chaines[8][8] qui contiendra les labels des boutons afin de faciliter les calculs sur le tableau 
    for(i=0;i<8;i++)
    { 
          for(j=0;j<8;j++)
           {
                   stext=gtk_button_get_label(GTK_BUTTON(bouton[i][j]));
                   strcpy(stext,chaine[i][j]);
            }
    }
     
             //ensuite je veux tester la valeur du tableau chaine de caractere
    for(i=0;i<8;i++)
    { 
          for(j=0;j<8;j++)
           {
                   if(strcmp(chaine[i][j], "N")
                  {
                         //...
                  }
            }
    }
    //les valeurs de chaines de caratere sont soit "B" soit "N" soit NULL
    j espere avoir ete suffisament precis

    merci de votre aide,

    zakos

  11. #11
    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
    Ceci tu ne peux par le faire de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(stext,chaine[i][j]);
    Ici, tu spécifie même l'indice du caractère dans la chaîne de l'indice i ce qui ne va pas, il faut plutôt faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(stext,chaine[i]);
    C'est la même chose pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strcmp(chaine[i][j], "N")
    Il ne faut spécifier que l'indice de la chaîne dans le tableau de chaîne soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strcmp(chaine[i], "N")
    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 !

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    stext=gtk_button_get_label(GTK_BUTTON(bouton[i][j]));
    strcpy(stext,chaine[i][j]);
    Tu ne peux utiliser gtk_button_get_label() ainsi: Elle retourne un pointeur const.
    • Si tu veux modifier le label du bouton, utilise gtk_button_set_label().
    • Si tu veux copier le label dans ton tableau de chaînes, tu utilises strcpy() dans le mauvais sens: Il faut mettre la destination en premier.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut
    je n'ai peut etre pas bien saisi ton code franck, mais il semble que je me soi mal exprimé, je vais donc expliquer plus en detail ce que je veux faire :

    En fait, je veux coder ( enfin dois ) le jeu reversi ( ou otelo ). J'ai donc accès à un tableau statique de gtkwidget * button en [8][8]. Je me sert du label de ces boutons dans premier temps afin de placer les pions de chacun des jours, "N" pour noir et "B" pour ... blanc ( facile ).

    Ensuite, afin de calculer les calcul de l'I.A, je souhaite faire une image de ce tableau de bouton, et donc récuperer tous les labels dans un tableau statique ( en [8][8] evidement ). Le tableau image[8][8]alloué dans mon code avait donc pour but de contenir des gchar * pointant le label de case du tableau original bouton[8][8] lui correspondant.

    La réponse me vient peut etre en tapant ces lignes, l'erreur n'est elle pas de ne pas avoir allouer dynamiquement a grand coup de g_malloc chacun des gchar * de mon tableau image ?

    merci de votre aide

    zakos

  14. #14
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Récupérer les labels est une mauvaise idée: Les labels servent à la vue et ne devraient pas servir de stockage.

    Tu devrais utiliser une matrice permanente (simplement de char plutôt que de char*) et recopier le texte dans les labels à chaque actualisation):
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void Actualiser(gtkwidget * matPBoutons[8][8], char const matPieces[8][8])
    {
    	char sz[2] = { '\0', '\0' };
    	size_t i;
    	for(i=0 ; i<8 ; i++)
    	{
    		size_t j;
    		for(j=0 ; j<8 ; j++)
    		{
    			sz[0] = matPieces[i][j];
    			gtk_button_set_label(GTK_BUTTON(matPBoutons[i][j]), sz);
    		}
    	}
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. chaines de caractère GTK+
    Par miss_poopoucy dans le forum C
    Réponses: 1
    Dernier message: 27/06/2011, 19h22
  3. Réponses: 9
    Dernier message: 17/01/2003, 11h45
  4. Lire Une Chaine De Caractères
    Par Jonathan_Korvitch dans le forum C
    Réponses: 12
    Dernier message: 07/01/2003, 05h37
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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