GTK+ Entry in Char

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

GTK+ Entry in Char

Beitrag von +Fuss+ » Mi Feb 11, 2009 8:09 pm

Mit dem Vokabel-Spiel in GTK+ geht's voran.

Jetzt wollte ich eigentlich nur aus einem GTK+ Entry den Text in einen char kopieren:

die char's ist als globale Var angelegt:

Code: Alles auswählen

char *mann_links, *mann_rechts;
dann die entsprechende Codezeile:

Code: Alles auswählen

  //Mannschaftsnamen auslesen
  mann_links = gtk_entry_get_text(GTK_ENTRY(entry_links));
  mann_rechts = gtk_entry_get_text(GTK_ENTRY(entry_rechts));
die char's werden dann als Labels für einen Button genommen.

Aber auf dem einen Button steht eine Verzeichnis-Angabe und auf dem anderen unleserliche Zeichen.

Woran kann das liegen?

MfG Fuss

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: GTK+ Entry in Char

Beitrag von cloidnerux » Mi Feb 11, 2009 8:21 pm

Es kann daran liegen, das mit gtk_entry_get_text du einen Speziellen gtkString bekommst, der Unicodestandart oder andere Spezialldinge benutzt und dein Compiler die Konveration verschweigt.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: GTK+ Entry in Char

Beitrag von +Fuss+ » Mi Feb 11, 2009 8:43 pm

Dann müsste das ein "gchar" sein. Ich probier das mal, obwohl char - gchar dasselbe ist.

Gerade noch gemerkt: gibt eine Fehlermeldung wegen UTF-8 String irgendwas

Probiert mit gchar (also nur beim erstellen der Var ein 'g' hinzugefügt):
Dann kommt eine Fehlermeldung von Code-Blocks / GCC:

Code: Alles auswählen

/home/****/Programmierung/Vokabeln/main.c:176: Warnung: Zuweisung streicht Qualifizierer von Zeiger-Zieltyp


MfG Fuss

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: GTK+ Entry in Char

Beitrag von Xin » Mi Feb 11, 2009 10:09 pm

+Fuss+ hat geschrieben:Dann kommt eine Fehlermeldung von Code-Blocks / GCC:

Code: Alles auswählen

/home/****/Programmierung/Vokabeln/main.c:176: Warnung: Zuweisung streicht Qualifizierer von Zeiger-Zieltyp
Klingt, als ob Du Dich nicht um die Const-Correctness kümmerst.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: GTK+ Entry in Char

Beitrag von fat-lobyte » Do Feb 12, 2009 11:37 am

+Fuss+ hat geschrieben:Mit dem Vokabel-Spiel in GTK+ geht's voran.

Jetzt wollte ich eigentlich nur aus einem GTK+ Entry den Text in einen char kopieren:

die char's ist als globale Var angelegt:

Code: Alles auswählen

char *mann_links, *mann_rechts;
dann die entsprechende Codezeile:

Code: Alles auswählen

  //Mannschaftsnamen auslesen
  mann_links = gtk_entry_get_text(GTK_ENTRY(entry_links));
  mann_rechts = gtk_entry_get_text(GTK_ENTRY(entry_rechts));
die char's werden dann als Labels für einen Button genommen.

Aber auf dem einen Button steht eine Verzeichnis-Angabe und auf dem anderen unleserliche Zeichen.

Woran kann das liegen?

MfG Fuss
Wer Lesen kann ist klar im Vorteil:
http://library.gnome.org/devel/gtk/unst ... y-get-text

Da steht klipp und klar:
GNOME Documentation Library hat geschrieben:Returns :
a pointer to the contents of the widget as a string. This string points to internally allocated storage in the widget and must not be freed, modified or stored.
Das bedeutet, dass der Text irgendwo intern gespeichert wird. Wenn du danach gtk funktionen aufrufst (oder wenn sie von woanders aufgerufen werden), kann GTK entscheiden dass der speicher nicht mehr benötigt wird und räumt ihn Frei.
Was dabei rauskommt ist, dass du einen undefinierten String erhälst.
Du musst einfach nur den String den du erhälst gleich wieder in einem anderen abspeichern, etwa so:
google zweiter treffer hat geschrieben:

Code: Alles auswählen

gchar *id;
id = g_strdup (gtk_entry_get_text (GTK_ENTRY (widget)));
/* mach hier was mit id */
/* und dann id wieder freigeben */
g_free (id);
Das alles hab ich übrigens mit 2 minuten googeln herausgefunden, ohne eine Ahnung von GTK zu haben. Bitte in Zukunft zuerst die Dokumentation der Funktion beachten, dann erst Fragen stellen!
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: GTK+ Entry in Char

Beitrag von +Fuss+ » Do Feb 12, 2009 11:39 am

also:
1. hab ich den gchar gar nicht als "const" deklariert.
2. Was kann ich gegen den Fehler mit der Zuweisung unternehmen?
Ich hatte das Problem schonmal und habe es nicht richtig gelöst bekommen.

MfG Fuss

EDIT: ich sehe grade erst, dass noch wer geschrieben hat, ich lese mir das jetzt mal durch. Danke für die Hilfe
Zuletzt geändert von +Fuss+ am Do Feb 12, 2009 11:41 am, insgesamt 1-mal geändert.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: GTK+ Entry in Char

Beitrag von fat-lobyte » Do Feb 12, 2009 11:41 am

+Fuss+ hat geschrieben:also:
1. hab ich den gchar gar nicht als "const" deklariert.
2. Was kann ich gegen den Fehler mit der Zuweisung unternehmen?
Ich hatte das Problem schonmal und habe es nicht richtig gelöst bekommen.

MfG Fuss
Ein guter anfang wäre es meinen Post zu lesen.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: GTK+ Entry in Char

Beitrag von +Fuss+ » Do Feb 12, 2009 2:48 pm

Nochmal danke für den Tipp, hat genauso geklappt wie du gesagt hast.

In dem Tutorial in dem ich das gelesen habe stand es so drin:

Code: Alles auswählen

 gchar *text=gtk_entry_get_text(GTK_ENTRY(widget));
...
label = gtk_label_new(text);
Was ja, wie ich jetzt weiß, falsch ist.

MfG Fuss

Antworten