002
08.10.2003, 11:45 Uhr
Pablo
Supertux (Operator)
|
path ist ein char*, also eine Zeichenkette
len = strlen(path)-1 heißt, dass die Variable (wahrscheinlich vom Typ int) len mit der Länge der Zeichenkette - 1 initialisiert, weil der letzte gültige Buchstabe, auf den man zugreifen kann (vor '\0') ist nämlich strlen(path)-1
Die Bedingung der For-Schleife ist (len > 0) && (path[len] == '/'); was sagt folgendes: Tue, was in de For schleife ist (in diesem Fall gar nix, solange die Bedingug wahr ist. Die Bedingung (len > 0) && (path[len] == '/') ist wahr wenn: die Variable len einen Wert speichert, der größer als 0 ist und das Charakter (der Buchstabe) von der Zeichenkette path an der Stelle len '/' einem Slash entspricht.
path[len--] = '\0' =========== Jedesmal, wenn die Bedingung wahr ist, wird das Charackter an der Stelle len mit dem 0-Terminierend-Charakter '\0' gesetzt und len um 1 dekrementiert (wegen len--).
Was das ganze tut.
Stell dir vor du hast char* path="/Verzeichnis1/Verzeichnis2////////"; Der Pfad ist ungültig, wegen den vielen /////// Die For-Schleife mach sie weg. path[0] = '/' path[1] = 'V' path[2] = 'e' ... path[strlen(path)-1] = '/' (das letzte / vom ganzen /////////) path[strlen(path)] = '\0'
Die Forschleife weißt in len die Länge der Zeichenkette zu. Dann überprüft: ist len > 0 ? ja. Ist path[len] = '/' ? ja. Also machen wir / weg, indem ich path[len]='\0' setze. Somit habe ich das letzte / entfernt. Dann dekrementiere len um 1. Und nochmal. st len > 0 ? ja. Ist path[len] = '/' ? ja. Also machen wir / weg, indem ich path[len]='\0' setze. Somit habe ich das letzte / entfernt. Dann dekrementiere len um 1. Und nochmal..... das ganz wird ausgfeührt, bis len eine Zahl ist, bei der path[len] = '2' also != '/', dann weißt er, gut, somit haben wir alle unnötige / gelöscht, jetzt sind wir fertig.
Es könnte sein, dass char* path = "//////////////////"; Da path nur / hat, dann wird irgendwann len == -1 und path[-1] gibt es nicht, deshlab die Bedingung len > 0 && ....
Bearbeitung: |
ts.ts..... virtual war wohl bisschen schneller als ich
|
-- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 08.10.2003 um 11:46 Uhr von Pablo Yanez Trujillo editiert. |