Aufgabe 2

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe 2
Hey Leute
Braucht man bei der Aufgabe 2 für die Eingabeworte einen dynamischen Speicher? In der Aufgabenstellung steht ja, dass ein Wort die maximale Länge von 100 chars nicht überschreiten darf. Reicht es dann nicht, wenn man für jedes neue Wort einen Speicherplatz von 100 chars zur Verfügung stellt, also einen einfachen Array? Oder muss das flexibel sein?


Wie stellst du für jedes neue Wort den Speicherplatz bereit?


Soll das Programm nur die Wörter, die zur Laufzeit eingelesen werden sortieren oder auch die Wörter mitsortieren, die evtl. der main-Funktion als Parameter übergeben wurden?
Zum Einlesen zur Laufzeit habe ich außerdem noch eine Frage. Die genaue Verwendung ist mir noch unklar.

Wenn ich diese ausführe kann ich ja anscheinend die Wörter eingeben, die sortiert werden sollen, mit Enter trenne ich sie voneinander. Aber wie signalisiere ich dem Programm, dass ich fertig mit Wörter-Einlesen bin und es sie nun sortieren soll?


Laut Aufgabenblatt nur von [m]stdin[/m] (das war frueher noch anders).

[m]Ctrl-D[/m] „schickt“ EOF an das Programm. Oder einfach mit Shell-Redirection, indem du die Werte in eine Datei packst und dann sortieren lässt (das [m]cat[/m] gibt nur als Beispiel den Inhalt von [m]datei[/m] aus):

$ cat datei
d
e
a
b
c
$ ./wsort < datei
a
b
c
d
e

Nullbytes in der Eingabe
Wie verhält es sich mit \0 in der Eingabe? Die Referenzimplementierung tut da interessante Dinge. Sollen wir das nachbauen oder ist das als undefiniert anzusehen?

Also was ich konkret meine (der Python-Befehl gibt jedes mal 10 mal ‘a’, ein Nullbyte und {50,100,150,200} mal ‘b’ aus):

aufgabe2> python -c "print 'a'*10 + '\0' + 'b'*50" | ./pub/wsort 
aaaaaaaaaa
aufgabe2> python -c "print 'a'*10 + '\0' + 'b'*100" | ./pub/wsort 
aaaaaaaaaa
bbbbbbbbbb
aufgabe2> python -c "print 'a'*10 + '\0' + 'b'*150" | ./pub/wsort 
aaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
aufgabe2> python -c "print 'a'*10 + '\0' + 'b'*200" | ./pub/wsort 
Wort zu lang...ignoriere
aaaaaaaaaa

Wenn der Aufrufer Null-Bytes eingibt, ist das Verhalten undefiniert und der Aufrufer selber schuld. Alle anderen Zeichen müssen aber gemäß der Aufgabenstellung verarbeitet werden.