Not logged in. · Lost password · Register

The_Tricker
Member since Jul 2013
12 posts
Subject: Juli 2012 2b) stringstack
Erstmal die Angabe:
Klausur „Systemnahe Programmierung in C“ / Bachelor Mechatronik-Mathematik-Technomathematik Juli 2012
- 10 von 15 -
Aufgabe 2b: stringstack (18 Punkte)
Sie dürfen diese Seite zur besseren Übersicht bei der Programmierung heraustrennen!
Implementieren Sie ein Modul
stringstack
, in dem man Zeichenketten speichern
kann und das die zuletzt hinzugefügte Zeichenkette als erstes wieder zurück gibt.
Im Detail soll das Modul
stringstack
folgendermaßen funktionieren:
– Zur internen Verwaltung der Zeichenketten wird eine verkettete Liste verwen-
det. Der Aufbau der Listenelemente ist vorgegeben (
struct elem
).
– Die Funktion
int pushstr(char* st)
bekommt eine Zeichenkette übergeben,
speichert diese möglichst platzsparend und fügt sie mit Hilfe eines neues Lis-
tenelements am Anfang der verketten Liste ein.
Im Fehlerfall wird -1 zurückgegeben (an dieser Stelle keine Meldung ausge-
ben).
– Die Funktion int popstr(char *buf, int bufsize) überprüft zunächst, ob der
übergebene Puffer für die zu entnehmende Zeichenkette groß genug ist. Ist er
zu klein, wird die tatsächlich benötigte Puffergröße zurückgegeben.
Andernfalls wird das erste Element aus der verketten Liste entnommen und
die zugehörige Zeichenkette in den übergebenen Puffer kopiert.
Im Erfolgsfall wird 0 zurückgeliefert, befinden sich keine Elemente in der
Liste wird -1 zurückgeliefert.
Achten Sie auf die Behandlung möglicher Fehler sowie darauf, dass allokierter Spei-
cher jeweils so bald wie möglich wieder freigegeben wird.

Hier mein Code zur pushstr:

static struct elem head;

int pushstr (char* str) {
    if (st == NULL) {
        return -1;
    }
    struct elem insert;
    insert.str = st;
   
    if(head == NULL){
        head = insert;
    } else {
        struct elem tmp = head;
        while(tmp.next != NULL) {
            tmp = tmp.next;
        }
        tmp.next = insert;
    }
}

Funktioniert das so? Ich verstehe nicht ganz wie die struct elem funktioniert. Wir haben doch einfach bei jeden elem-Objekt einen next-Zeiger und einen String. Also kann ich mir doch einfach mal so nen head erstellen und dann stück für stück durchgehen, an welcher Stelle ich bin.

Krieg ich bei der abfrage "while(tmp.next!= NULL) unter umständen ne Nullpointer exception raus? Das befürchte ich nämlich. Weiss aber nicht wie icch das verhindern kann. Hab leider keine möglichkeit das hier zuhause ordentlich zu kompilieren.

Freue mich über hilfe! :)
The_Tricker
Member since Jul 2013
12 posts
denkt euch das "struct" in meinem Code vor den elem- Objekten weg :D

die struct schaut übrigens so aus:
struct elem {
   struct elem * next;
   char * str;
}
morty
SPiC-Meister
(Moderator)
Member since May 2011
331 posts
...wir haben dieses Semester in der Übung kein malloc gemacht -> Kommt nicht dran. Das Problem ist nämlich, dass insert freigegeben wird, sobald die Funktion verlassen wird. Ansonsten ist das ein Stack und keine FIFO, kannst also vorne einreihen.
Nullpointerexceptions gibt es in C nicht. Es geht einfach nur Kaputt - wenn du _Glück hast_ stürzt dein Programm ab. Aber in diesem Fall geht das - ginge sogar unter Java!
The_Tricker
Member since Jul 2013
12 posts
super danke!
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Special characters:
Go to forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen