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 :

char et gchar !


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    A_B
    A_B est déconnecté
    Membre confirmé Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Par défaut char et gchar !
    Salut :
    Je suis en train de travailler sur des structures comportant des champs de caracteres comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct perso {
                    gchar *nom;
                    gchar *prenom ;
                    gchar *telephone ;
                                          }bloc ;
    Et je désire les ecrire dans un fichier binaire, normalement avec (fwrite), et puis les reccuperer avec (fread) , et mettre le resultat dans un fichier (texte.txt) pour l'afficher dans un (text view)et la c'est le probleme , car fputs utilise une chaine de char et moi j'en ai une chaine gchar, alors comment je fais ?
    Voila une partie du code :
    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
    33
    34
    35
    36
    37
    38
    39
    void cb_consulter (GtkWidget *widget, gpointer data)
    {
        FILE *texte = NULL ;
        FILE *fichier = NULL;
     
        bloc *temp  = NULL ;
        gchar nombre ;
        const gchar *nom , *prenom , *tel ;
        int x=0;
     
        temp = (struct perso*) malloc (sizeof (struct perso));
     
        fichier = fopen ("repp","r");
     
     
     
                              while (fread(temp,sizeof(bloc),1,fichier),!feof(fichier))
     
                              {
                               nom    =   temp->nom ;
                               prenom =   temp->nom ;
                               tel    =   temp->nom ;
                               fputs(nom,texte);
                               fputs(prenom,texte);
                               fputs(tel,texte);
     
                                x++ ;
                               }
                               nombre = x ;
     
                               free(temp);
     
                               fclose(fichier);
     
                               open(widget,texte);
     
     
     
    };

  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
    Hé bin ? un gchar c'est quoi d'après toi ?
    voilà, c'est rien d'autre que ca, que ce soit l'un ou l'autre cela ne change strictement rien du tout donc aucun problème et si ton compilateur t'embêtes, alors tu fait un cas c'est tout, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fputs((char *)nom,texte);
    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
    A_B
    A_B est déconnecté
    Membre confirmé Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Par défaut
    Non toujours ça ne marche pas (l'ecriture des chaines de caractere sur le fichier texte ), meme si je le consulte manuellement , je ne trouve pas ce que je prevoit ! Je trouve des caractere bizarre..Donc l'ecrituire n'a pas eu lieu normalement !

  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
    Bin montre alors ta fonction qui écrit ... ou le code complet de ton programme que je puisse tester chez moi
    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
    A_B
    A_B est déconnecté
    Membre confirmé Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Par défaut
    Voila la fonction :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    void cb_consulter (GtkWidget *widget, gpointer data)
    {
        FILE *texte   = NULL ;
        FILE *fichier = NULL;
     
        bloc *temp    = NULL ;
     
        char *nom = NULL;
        char *prenom = NULL;
        char *tel = NULL;
     
        int x = 0;
     
        temp = (struct perso*) malloc (sizeof (struct perso));
     
     
        fichier = fopen ("repp","r");
        texte   = fopen ("texte.txt","w");
     
     
                              while (fread(temp,sizeof(bloc),1,fichier),!feof(fichier))
     
                              {
                               temp = (struct perso*) malloc (sizeof (struct perso));
                               nom    =   temp->nom ;
                               prenom =   temp->nom ;
                               tel    =   temp->nom ;
     
                               free(temp);
     
                               fputs(nom,texte);
                               fputs(prenom,texte);
                               fputs(tel,texte); 
     
                                x++ ;
                               }
     
     
     
     
                               fclose(fichier);
                               fclose (texte);
     
                               open(widget,data);
     
     
     
    };
    voila la fonction open :
    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
    void open (GtkWidget*widget, gpointer data)
    {
        open_file("texte.txt",GTK_TEXT_VIEW(data));
        gtk_widget_show_all(affiche);
       (void)widget;
    }
     
    static void open_file (const gchar *file_name, GtkTextView *p_text_view)
    {
    gchar *contents              = NULL;
    GtkTextBuffer *p_text_buffer = NULL;
     
    if (g_file_get_contents (file_name, &contents, NULL, NULL))
    {
        p_text_buffer = gtk_text_view_get_buffer (p_text_view);
        gtk_text_buffer_set_text (p_text_buffer, contents, -1);
     
    }
    }

  6. #6
    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
    Un truc auquel je n'ai pas fait attention mais utiliser fread sur un flux texte ne fonctionne pas, il faut utiliser fgets qui reste encore la meilleure solution. En effet, fread n'est fait que pour les flux binaires et non texte donc ton problème viens du fait que tu lit ton fichier avec cette fonction et donc forcément tes données sont éronées.

    C'est comme si tu veux utiliser fwrite pour écrire dans un flux texte puis après tu veux lire le fichier en l'ouvrant dans un éditeur, tu risques d'avoir des surprises

    Le mieux est d'enregistrer et de lire uniquement dans le même format donc écriture avec fprintf et lecture avec fgets !
    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 !

Discussions similaires

  1. differences char, gchar int gint
    Par Christophe dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 14/10/2011, 11h43
  2. conversion gchar * vers char
    Par open_source dans le forum GTK+ avec C & C++
    Réponses: 8
    Dernier message: 28/12/2007, 20h59
  3. conversion gchar vers char
    Par shito dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 16/01/2007, 20h09
  4. Réponses: 3
    Dernier message: 02/07/2003, 16h24
  5. Réponses: 6
    Dernier message: 24/03/2003, 17h11

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