Anzeige:
Ergebnis 1 bis 5 von 5

Thema: gtk+ und Zeichenketten (char *)

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.11.2001
    Ort
    Germany, Offenburg
    Beiträge
    47

    Unhappy gtk+ und Zeichenketten (char *)

    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:

    Code:
    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 ...

    BITTE HELFT MIR !!!

    Viele Grüße,
    TB<tuxboy>

  2. #2
    Registrierter Benutzer
    Registriert seit
    10.04.2001
    Ort
    Bremen
    Beiträge
    339
    Ich denke dein Problem liegt hier:
    Code:
                    /* 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...b-Strings.html

    Code:
    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

  3. #3
    Registrierter Benutzer
    Registriert seit
    20.11.2001
    Ort
    Germany, Offenburg
    Beiträge
    47
    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,
    TB<tuxboy>

  4. #4
    Registrierter Benutzer
    Registriert seit
    20.11.2001
    Ort
    Germany, Offenburg
    Beiträge
    47
    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,
    Geändert von tuxboy (25-11-2002 um 19:33 Uhr)
    TB<tuxboy>

  5. #5
    Registrierter Benutzer
    Registriert seit
    10.04.2001
    Ort
    Bremen
    Beiträge
    339
    Nö!

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

    c ya,
    Tobias

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •