Eigene Testskripte

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.

Eigene Testskripte
Nachdem wir von offizieller Seite dazu ermutigt worden sind, eigene Testskripte für die Programmieraufgaben zu schreiben, habe ich mich mal hingesetzt und ein bisschen was zusammengestümpert:
http://airhardt.de.vu/sos2

Das Programm ist kein Ersatz für die schon vorhandenen Tests, sondern dient als Ergänzung. Es überprüft, ob bei jeder Klasse die Methoden [m]setFirstname()[/m] und [m]setLastName()[/m] sowie die Konstruktoren mit [m]NULL[/m]-Zeigern und mit überlangen Zeichenketten zurechtkommen.


Danke. War sehr hilfreich <_<


Hm, heißt doch nicht, dass die Namen nicht länger sein DÜRFEN, als die 50 Zeichen. Es wird nur gesagt, dass man sie kürzen DARF, aber nicht muss. Soll quasi nur bei der Speicherverwaltung helfen vermute ich.

Aber mit nem Duplikat von Eingabestring muss ich mich da ja net drum kümmern. Aber trotzdem schön, dass wenigstens einer mal was macht g

edit: PS: Das mit den Nullpointern hängt dir wohl noch von Sos1 nach g Ich hoffe, dass das jetzt nicht mehr benötigt wird, da das ja schon viel früher im engültigen Programm abgefangen werden müsste oder?


Naja, eine Abfrage auf einen Nullpointer sollte man immer dann machen, wenn man einen Pointer bekommt.
Sicher ist da sicher.

Weiterhin steck ich die Namen einfach in einen std::string.
Mir ist es doch piepegal wie lang der Name wird.


Ja, hatte ich auch mal mit Strings, aber das war mir dann zu doof, man muss ja eh wieder einen char* zurück geben… Und dann das hin und her, wollte ich net!


String::c_str()?! Ist allemal kürzer als mit char-arrays zu hantieren. Und mit String::assign(…) kann/könnte man auch ganz einfach auf 50 Zeichen kürzen…


Außerdem ist ein std::string doch wie ein heiliger Gral nach dem Semeser char*-Gefummel in SoS1.


Was ist gegen strdup einzuwenden? das mag nen char* und gibt einen zurück! Und dann gibts auch noch strndup, falls man wirklich kürzen will!


Naja, char* war gestern. Heute (C++) ist std::string.


und morgen dann std::wstring :slight_smile:

Ich werd bei den SoS2 Aufgaben aber auch std::string verwenden, das char* rumgefummel ist mir dann doch zu stressig.


Jap, wie ihr woll, ich fands so am einfachsten, noch dazu, weil ich keine weitere Operation auf dem String machen soll…

Was ist denn von der Performance her besser?


Pauschal gesagt sind die C-Funktionen performanter, aber fuer viele Probleme ist ein C++ String einfach bequemer, z.B. weil man sich nicht um die Grenzen kuemmern muss. Wenn man dynamische char* haben will, verliert man wieder einen guten Teil des vorigen Performancegewinns, oder macht sogar Verlust :-/


Hallo,

der nullterminierte String von C ist doch ein längst überholtes Relikt.

Wer es wirklich voll geil und trendy findet, mit char* herumzuhampeln, hat schlichtweg einen an der Klatsche. Und wer einen char* so ultra praktisch findet, gehört sicher auch zu denen, denen Ncurses schon zu viel GUI ist.

Traurig dabei ist, dass auch std::string eine eher nur als bescheiden zu bezeichnende Funktionalität aufweist.

C++ ist nun mal der gescheiterte Versuch, C künstlich auf einen höheren Level zu bekommen.

Bei einem “normalen” C+±Projekt sollte man dennoch versuchen, wo überall möglich (d.h., kein PITA) std::string zu verwenden, zusammen mit std::stringstream z.B.
Irgendwann aber wird einem das wiederum so auf den Sack gehen, dass man entweder wieder die Steinzeitstrings verwendet oder zu einer wirklich modernen Programmiersprache gewechselt hat.

cu
Ford Prefect


AUf dem Angabenblatt, unter dem UML-Kram, vor der Liste der Klassen im einzelnen steht folgende Zeile:

Daher kann man sie wohl einfach abschnippeln, muss wohl aber nicht. Aber warum mehr Arbeit als noetig machen :wink:


@Ford Perfect: Vorsicht mit deinen Aussagen, du lehnst dich auch gegen den Lehrstuhl auf, denn der will ja in der Methodendeklaration nen char* und nicht etwa einen String* oder ähnliches…

Ich finde nur, dass beim bisherigen Funktionsumfang ein strdup auf dem char* völlig ausreichend ist!

Gruß, vielleicht


Hallo,

es ist nicht der Lehrstuhl, sondern der entspr. Aufgabensteller. Und ansonsten lehne ich mich gerne auf ;-)).

Bei einer Aufgabe, die in C++ einführen soll, ist die Verwendung von char* in der Aufgabenstellung auf jeden Fall zu kritisieren. Im Übrigen sollte auch kein string* übergeben werden, sondern eher ein const string&. Was wiederum die Hässlichkeit von C++ aufzeigt. Aber ich will nicht weiter offtopic posten hier.

Gegen dein strdup ist natürlich gar nix zu sagen. strndup ist allerdings nicht ANSI C++.

cu,
Ford Prefect


wenigstens in die LSB hat es strndup geschafft, zwar nicht ISO-C aber unter Linux sollte es da sein :wink:
http://refspecs.freestandards.org/LSB_1.2.0/gLSB/baselib-strndup.html


Soll man für SoS 2 nicht mit -ansi -pedantic compilieren?


Ja das soll man.