009
09.10.2003, 01:48 Uhr
Pablo
Supertux (Operator)
|
Zitat: |
Alf postete Aber ne Gefährlich schleife. path muss ein Null-terminated string sein. Das Heißt da ist Arbeitsspeicher für die Variable path reserviert und das letzte Byte hat den wert 0 (NULL). Nun sucht die Schleife Rückwerts nach dem Zeichen '/' und überschreibt dann das nach folgende Byte mit dem Zeichen '0' (Wert 48 ASCII). Na Gut. Ist aber, das Zeichen vor der NULL am ende, das Zeichen '/' dann überschreibt die Schleife die NULL am ende mit dem Zeichen '0' (wert 48) beim erneuten auf ruf von ptr = strrchr(path, '/'); liest die Funktion über den Reservierten Speicher hinaus und über schreibt fremden Speicher!
Wo hast du die Schleife denn her?
|
Ach klar, im Prinzip macht dasselbe, wie die Andere Schleife, aber rückwerts.mir ist nicht das mit dem strrchr eingefallen, obwohl ich gepostt hab, was das macht.
Die meisten strings sind immer 0-Terminierend und als C Programmier müsste man dafür sorgen, dass ihre Strings 0-terminierend sein. Ich mach ab und zu keine 0-terminidernende strings, aber ich passe ich sehr gut auf sie auf. -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! |