RE: radio button label
- From: "Dugas, Alan" <alan dugas analog com>
- To: Eric Monsler <eric_monsler radixwireless com>
- Cc: Darin Fisher <dfisher jagger me berkeley edu>, gtk-list gtk org
- Subject: RE: radio button label
- Date: Fri, 20 Oct 2000 10:28:54 -0400
Thanks to all who reponded to my questions. Based on what has been said, I need
to bear in mind what a function does when checking its prototype. Thanks again
to all!
-- Stupid Genius
> ----------
> From: Eric Monsler[SMTP:eric_monsler radixwireless com]
> Sent: Thursday, October 19, 2000 6:34 PM
> To: Dugas, Alan
> Cc: Darin Fisher; gtk-list gtk org
> Subject: Re: radio button label
>
> "Dugas, Alan" wrote:
> >
> > BINGO!!! Nice work Darin! ...and thanks also to Jeff! I don't understand
> why
> > the changes in Darin's code work however. The online documentation declares
> > gtk_label_get() as follows;
> >
> > void gtk_label_get(GtkLabel *label, gchar **str);
> >
> > not
> >
> > void gtk_label_get(GtkLabel *label, gchar *str);
> >
> > Could either of you enlighten me? Thanks in advance.
> >
>
>
> This is a common C error with pointers. Basically, the gtk_label_get
> wants to tell the calling code where the string is. The calling code
> needs a char * type, to contain this information. The intent of the
> call is that the address, i.e. storage location, into which the location
> of the desired string whould be written, it specified in the call.
> Clear as mud?
>
> So, if you use a variable on the stack or in memory, and specify the
> address of that variable, the correct char * pointer value gets written
> into that variable.
>
> If you create a char ** variable, pointer to a pointer, and pass that
> in, the gtk_label_get function will try to write the correct char *
> pointer value into the location specified by the value of the char **
> variable. But, you've never set the value of the char ** to the address
> of a valid pointer. Hence, the write by gtk_label_get is attempted into
> whatever random space corresponds to the data in that char ** memory.
>
> Another valid construct (IIUC, barring tyops) could be:
>
> gchar **radio_button_handle = (gchar **) NULL;
> gchar *radio_button_label = NULL;
>
> /* No casting should be required here, this is important,
> it shows that we are handling things properly */
> radio_button_handle = &radio_button_label;
>
> gtk_label_get(GTK_LABEL(label), radio_button_handle);
>
>
>
> Hope that helps!
>
> Using addresses of variables for function returns, and for input/output
> parameters, is powerful but can get confusing, and the prototyping (even
> if syntactically valid) does not capture the subtleties of some usages.
>
> Eric Monsler
>
> _______________________________________________
> gtk-list mailing list
> gtk-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtk-list
>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]