no need to declare *str, like this: void edit_changed (GtkWidget *widget, gpointer *data) { gchar *strcopy; strcopy = g_strdup(gtk_entry_get_text (GTK_ENTRY (widget))); g_print ("Entry changed to %s\n", strcopy); g_free(strcopy); } On Apr 17, 2007, at 8:09 AM, William D. Tallman wrote: > On Mon, Apr 16, 2007 at 05:01:29PM -0600, Michael L Torrie wrote: >> On Tue, 2007-04-17 at 08:22 +1000, Andrew Cowie wrote: >>> Return type of gtk_entry_get_text() is (const gchar*), not just >>> (gchar*). You discarded the const qualifier when assigning the >>> result to >>> str. >>> >>> Just declare str with const. >> >> The reason why this is important is because gtk_entry_get_text is >> returning you just a pointer to a buffer inside the widget. >> Therefore >> you should never modify it. If you do, you run the risk of >> crashing the >> program. That's why the return type is const and the compiler >> gives you >> a warning. >> >> If you want to do something to the string you need to copy it with >> g_strdup, remembering to free your copy when you are done. >> >> Michael > > Then it should be like this? > > void edit_changed (GtkWidget *widget, gpointer *data) > { > const gchar *str; > gchar *strcopy; > > str = gtk_entry_get_text (GTK_ENTRY (widget)); > > strcopy = g_strdup(str); > > g_print ("Entry changed to %s\n", strcopy); > > free(strcopy); > } > > I'm no whiz with C itself and have never used strdup. IIUC, the > template is as above, replacing the g_print with whatever is to be > done > with the copied string. Is that correct? If not, what don't I > understand here? > > Thanks, > > Bill Tallman > > _______________________________________________ > gtk-list mailing list > gtk-list@xxxxxxxxx > http://mail.gnome.org/mailman/listinfo/gtk-list > _______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gtk-list