On Fre, 02 Aug 2002 at 20:52 (+0200), Thorsten Haude wrote: [str(n)cmp]
Es kann sein, daß er nach der dritten Position weiter vergleicht.
Nein, das kann nicht sein! Teste es! Dann würde diese Funktion nämlich schlicht und einfach falsche Ergebnisse liefern (siehe unten). [...]
Was bringt mir was? Strings unbekannter Länge in C sind bei mir tatsächlich beliebig unbeliebt, also würde ich sie entweder zählen oder besser noch nicht zulassen.
Die Länge eines Strings in C ist _nie_ unbekannt. Nutze strlen(), dann erfährst auch Du sie! Aus man strlen: DESCRIPTION The strlen() function calculates the length of the string s, not including the terminating `\0' character.
Du hast bei einem strncmp() _immer_ den zusätzlichen Aufwand, die String-Länge prüfen, bestimmen, übergeben zu müssen.
Nein, gewöhnlich haben Strings eine #definierte maximale Länge, die man dann auch nett in strncmp() benutzen kann.
Gewöhnlich haben _statisch_ deklarierte Strings eine definierte maximale Länge - was ist mit dynamisch erzeugten (Stichwort malloc)? Und auch bei statischen Strings musst Du rechnen, nämlich dann, wenn die Definitionen zweier Strings sich unterscheiden. Dann musst Du nämlich feststellen, welche der beiden Längen Du nimmst. Das willst du alles hart kodiert in das Programm schreiben? Wie flexibel und gut wartbar ;-)
Du musst in einem C-Programm doch sowieso dafür sorgen, dass alle Deine Strings sauber mit 0 terminiert sind - der strcmp() wird immer ein sauberes Ergebnis bringen. Selbst wenn nicht explizit bei 0 aufgehört wird, ist der Umstand, dass ein String zu Ende ist(0) und der andere nicht (!=0) ein Unterschied, der zu einem Returncode != 0 führt.
Was aber, wenn beide auf \0 enden?
Das tun sie sowieso. Und wenn sie an der gleichen Stelle mit 0
enden, dann sind sie gleich lang ;-) Wenn strcmp() bis hierher
gekommen ist, dann sind sie sogar gleich! Und dann hört er auf -
unabhängig davon, was danach kommt (noch ein kleines Beispiel):
<schnipp>
#include
Der Code wird im Gegenteil dann leichter lesbar sein, wenn sich der Leser nicht auch noch darüber Gedanken machen muß, ob mal wieder eine Funktion aus string.h aus dem Ruder läuft.
Diese Begründung ist ja nun absoluter Quatsch, sorry! Woher soll denn Dein Leser wissen, dass nicht strncmp() aus dem Ruder läuft? Jan