PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : gtk+ und Zeichenketten (char *)



tuxboy
25-11-2002, 19:07
Und wieder mal: Hi!

Sagt mal, wie kann ich aus einem gtk widget (in meinem Fall ein Tree) die Zeichenkette (Beschriftung) auslesen in einer char - Variable speichern und dann an eine zweite (auch aus dem Tree ausgelsen) anhängen und das Ergebnis (eine neue Variable) wieder in einem widget (Status bar) ausgeben?? Ich komm da mächtig durcheinander mit den verschiedenen chars (ob char *a; oder char a[128]; *grübel*).

Ich hab hier einen Ansatz um mein Problem zu verdeutlichen:



void get_current_path () {
GtkTreeIter iterCild, iterParent;
GtkTreeModel *model;
char *path;
char *currentDirectory;
char *parentDirectory;
char *temp;

if (gtk_tree_selection_get_selected (selection, &model, &iterCild)) {
/* als nächstes wird die Beschriftung des selektierten items ausgelesen (das Verzeichnis in dem der Benutzer sich gerade befindet */
gtk_tree_model_get (model, &iterCild, TITLE_COLUMN, &currentDirectory, -1);

/* der parent iter wird gesucht ...*/
if (gtk_tree_model_iter_parent (GTK_TREE_MODEL (model), &iterParent, &iterChild) == TRUE) {

/* ... und dessen Beschriftung ausgelesen */
gtk_tree_model_get (model, &iterParent, TITLE_COLUMN, &parentDirectory, -1);

/* die beiden Variablen currentDirectory und parentDirectory sollen jetzt aneinandergehängt werden */
g_strconcat (temp, parentDirectory, currentDirectory, NULL);
}
}

/* und hier in eine Status leiste übergeben werden */
push_status_message (status_bar_status, "Status", temp);
}


Ist der Ansatz eines Verzeichnisbaumes. Das das so nicht funktioniert ist klar; ich hab schon verschiedene Sache probiert und das i-net auf den Kopf gestellt (... nee, das hätte man wohl gemerkt ;) ). auch mit g_strdup etc.
Entweder krieg ich einen Memory - Fehler oder (für den Endanwender) völlig unbrauchbare Zeichen :confused: ...

BITTE HELFT MIR !!!

Viele Grüße,

tkortkamp
25-11-2002, 19:22
Ich denke dein Problem liegt hier:


/* die beiden Variablen currentDirectory und parentDirectory sollen jetzt aneinandergehängt werden */
g_strconcat (temp, parentDirectory, currentDirectory, NULL);

Du hast keinen Speicher für temp reserviert...
Tu dir selber einen Gefallen und benutz für Stringoperation einfach GString (von der glib).
Dokumentation hier: http://developer.gnome.org/doc/API/2.0/glib/glib-Strings.html



GString *temp = g_string_new("");
GString *parentDir_gstring = g_string_new(parentDirectory);
GString *currentDir_gstring = g_string_new(currentDirectory);
.
.
.
g_string_append(temp, parentDirectory);
g_string_append(temp, currentDirectory);
.
.
.


c ya,
Tobias

tuxboy
25-11-2002, 19:58
Bei Dir hat man immer das Gefühl, dass Du den lieben, lngen Tag nichts anderes machst als in diesem Forum zustöbern (oder es zu pflegen) und so armen Leuten wie mir auf die Sprüünge zu helfen ... Ich denke, ich spreche für alle hier, die des öfteren Hilfe brauchen, wenn ich sage: Ganz herzlichen Dank!! :)

Viele Grüße,

tuxboy
25-11-2002, 20:06
Jetzt aber noch was ....

Wie kann ich jetzt diesen GString in der Funktion
gtk_statusbar_push (GTK_STATUSBAR (GtkWidget *widget), char *contextId, char *message);
benutzen? Da beschwert sich der compiler verständlicherweise ..... Muss ich den erst wieder umwandeln?

Danke,

tkortkamp
25-11-2002, 20:49
Nö!

Mit temp->str greifst du auf den internen Buffer zu (char*).

c ya,
Tobias