PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stringausgabe der Inhalte eines Binären Suchbaum


Gast
2006-05-03, 17:02:27
Hi,
ich möchte die Int-Werte aus einem Suchbaum Inorder ausgebe, indem ich die Werte in einen String schreibe. Wenn im Baum die Werte 5, 9, 10 und 22 sind, soll die Ausgabe so aussehen:
5,9,10,22

Leider bekomme ich bei der Ausgabefunktion unten einen Segmentation Fault und ich weiss (natürlich) nicht weshalb. :(

Die Stringstückchen werden alle an str_l gehängt.




char* baumtostring(element_t *ele) {

char *str_l, *str_r, *tmp;
str_l = ""; str_r = ""; tmp = "";

if (ele != NULL) {

//linker Teilbaum
if (ele->links != NULL) str_l = baumtostring(ele->links);

// wenn im linken Teilbaum was war, Komma anhängen
if ( strcmp(str_l, "") != 0) strcat(str_l, ",");

// Wert des gerade betrachteten Knotens anhaengen
sprintf(tmp, "%d", ele->wert); // Integer-Wert umwandel
strcat(str_l, tmp); // und anhaengen

// jetzt rechter Teilbaum
if (ele->rechts != NULL) str_r = baumtostring(ele->rechts);

// wenn rechter Teilbaum nicht leer (in str_r steht was drin), Komma anfuegen
if ( strcmp(str_r, "") != 0) strcat(str_l, ",");
strcat(str_l, str_r); // Inhalt rechter Teilbaum oder leer - anfuegen
}
return str_l;
}

Gast
2006-05-03, 17:18:25
Hmm, es hat irgendwas mit dem sprintf zu tun:
wenn ich die Zeile auskommentiere und nur den Wert von ele auf die Konsole ausgebe kommt kein Fehler.

*ratlos*

Coda
2006-05-03, 17:23:52
Du solltest für die Strings evtl. Speicher allozieren. :rolleyes:

Gast
2006-05-03, 17:37:00
???

Neomi
2006-05-03, 17:47:10
Gast[/POST]']???

Ein char* ist nur ein Pointer, der zeigt nur auf "irgendwas" (und wenn es nur ein ungültiger Speicherbereich ist). Entweder mußt du den Speicher verwalten und den Pointer darauf zeigen lassen, oder du mußt eine Stringklasse dafür verwenden.

Gast
2006-05-03, 18:49:36
Verstehe ich nicht.
Wenn ich mir 2 Strings char *t1 und *t2 machen, da irgendwas reinschreibe (t1 = "huhu"; t2 = "tata") dann muss ich doch auch nichts allozieren?

In Java habe ich mir ein Programm mit Suchbaum auch schon geschrieben und wollte nun ähnlich vorgehen in C.
Allerdings verstehe ich nicht, wie man dies umsetzt (siehe Problem).
Hilfe. :(

Trap
2006-05-03, 18:59:01
Nein. Les dir mal durch wie char* funktionieren. Nicht so wie du beschreibst...

Gast
2006-05-03, 19:06:02
Was versteht ihr denn an "verstehe ich nicht" nicht? ;)
Ich möchte gerne mit binären Suchbäumen herumspielen und nicht erstmal C-interna studieren - seien sie noch so "low-level" (für euch).

Coda
2006-05-03, 19:34:13
Weißt du denn wieviele Elemente der Baum hat?

Das ganze ist in dem Fall weder "low-level" noch "trivial". C-Strings sind eben scheiße.

Wenn ich mir 2 Strings char *t1 und *t2 machen, da irgendwas reinschreibe (t1 = "huhu"; t2 = "tata") dann muss ich doch auch nichts allozieren?
Nein, denn die Strings werden zur Ladezeit im Speicher abgelegt und t1 und t2 entsprechend initialisiert. Da kannst du aber auch nichts anhängen, weil es nicht mehr Speicher gibt.