Wörter auslesen
-
@Wutz
Eigentlich nett, aberdu bekommst nen Zugriffsfehler wenn s2 ein Nullzeiger istund meine Version müsste eigentlich schneller sein, da du Bereiche doppelt prüfst :p
(Ok, wirklich messen kann man den Unterschied vermutlich nicht.)Edit:
Verdammt, der Standard macht mich fertig.
-
Wutz schrieb:
Sollte wohl auch einfacher gehen:
const char *my_strstr(const char *s1, const char *s2) { while (*s1) { const char *a=s1++,*b=s2; while( *a && *b && *a==*b ) ++a,++b; if( !*b ) return s1-1; } return 0; }
was daran einfacher ist kann ich nicht erkennen. du packst quasi meine erste if-abfrage in deine while-schleife rein.
nagut, eine if-abfrage hast du dann immerhin insgesamt weniger drin :D.
aber deutlich kürzer ist deine version jedenfalls und den trick *a=s1++ find ich auch gut, hut ab, hätte von mir sein können.
:p
-
cooky451 schrieb:
... aber du bekommst nen Zugriffsfehler wenn s2 ein Nullzeiger ist ...
Na und!
Das passiert bei den Standardfunktionen auch.
Du als Programmierer hast dafür zu sorgen, dass die Funktion keinen NULL-Zeiger bekommt.
-
DirkB schrieb:
Das passiert bei den Standardfunktionen auch.
Argh da habe ich etwas verwechselt, werde mich alsbald beschämt in meine Höhle verkriechen
-
Die meisten Standardfunktionen beachten den NULL-Zeiger nicht.
strlen()
versucht auch immer brav die Länge der Zeichenkette zu ermitteln, auf die der übergebene Zeiger zeigt.
Wenn der auf NULL zeigt und das Programm hat keine Zugriffsrechte auf die Adresse NULL, so ist dasstrlen()
egal. Dann hat der Programmierer einen Fehler gemacht, nichtstrlen()
.