Bonjour,
Voilà, je réalise la partie graphique d'un projet qui consiste en la réalisation d'un mini-chat en C. Pour cela j'utilise GTK+. Pour la gestion du chat en lui-même, j'ai décidé que les entrées saisies au clavier seraient enregistrées dans un fichier, puis que ce fichier serait lu et affiché dans une zone de texte juste au dessus de la zone de saisie.
Sauf que je n'ai encore jamais réussi à faire fonctionner le code. Il compile sans erreur (avec un certain nombre de warning, certes), mais lorsqu'on clique sur "entrer" pour valider le texte écrit dans la zone de saisie, cela sort des erreurs. Comme je suis un peu embrouillée au niveau des pointeurs et compagnie, j'essaie desesperemment de bidouiller les quelques lignes qui posent problèmes, mais je récupère erreur sur erreur, que ce soit un probleme de violation d'accès, ou bien des erreurs de type "debug assertion failed" à cause des fonctions fgets, fclose, etc..

En desespoir de cause, j'espere obtenir un peu d'aide ici.
Voici le 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <gtk/gtk.h>
#include <stdio.h> 
 
static GtkWidget *Texte_affich;
static GtkWidget* Texte;
 
void OnEnter(GtkWidget *Texte, gpointer data);
 
int main(int argc, char** argv[])
{
GtkWidget* Fenetre;
GtkWidget* Box_verti;
GtkWidget* Enter;
GtkWidget* Scroll;
gtk_init(&argc, &argv);
 
Fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
gtk_window_set_default_size(GTK_WINDOW(Fenetre), 500, 500); 
gtk_window_set_title(GTK_WINDOW(Fenetre), "Mini-chat");
g_signal_connect(G_OBJECT(Fenetre),"destroy",G_CALLBACK(gtk_main_quit),0);
 
Box_verti=gtk_vbox_new(FALSE,5); 
gtk_container_add(GTK_CONTAINER(Fenetre),Box_verti);
 
Scroll = gtk_scrolled_window_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(Box_verti), Scroll, TRUE, TRUE, 5);
 
Texte_affich=gtk_text_view_new();
gtk_container_add(GTK_CONTAINER(Scroll),Texte_affich);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
Texte = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(Box_verti),Texte, TRUE, TRUE, 0);
 
Enter=gtk_button_new_with_label("Entrer");
gtk_box_pack_start(GTK_BOX(Box_verti),Enter,FALSE,FALSE,0);
g_signal_connect(G_OBJECT(Enter),"clicked",G_CALLBACK(OnEnter),NULL);
 
gtk_widget_show_all(Fenetre);
 
gtk_main(); 
 
return 0; 
} 
 
 
void OnEnter(GtkWidget *Enter, gpointer data)
{
GtkTextBuffer *buffer;
GtkTextIter start;
GtkTextIter end;
FILE *fichier_affichage;
const gchar *chemin;
gchar lecture[1024];
gchar *sText, *sFile;
 
 
/*Recuperation texte*/
sText = gtk_entry_get_text(GTK_ENTRY(Texte));
/*Ouverture du fichier*/
fichier_affichage = fopen("Fichier_affichage", "w");
/*Ecriture fichier*/
fprintf(fichier_affichage, "%s", sText);
fclose(fichier_affichage);
sFile = "fichier_affichage";
 
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(Texte_affich));
fichier_affichage = fopen(fichier_affichage,"rt");
 
gtk_text_buffer_get_start_iter(buffer,&start);
gtk_text_buffer_get_end_iter(buffer,&end);
gtk_text_buffer_delete(buffer, &start, &end);
 
 
g_file_get_contents(sFile, lecture, NULL, NULL);
gtk_text_buffer_get_start_iter(buffer,&start);
gtk_text_buffer_insert(buffer, &start, lecture, -1);
 
fclose(fichier_affichage);
}
Les erreurs commencent à apparaitre dans la toute dernière partie de la fonction, lorsqu'on parle de buffer etc..bref, dès qu'il s'agit de réafficher le fichier dans la fenetre.
Merci d'avance.