Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#20

AW: String-Ende mit while finden

  Alt 12. Aug 2020, 14:59
Es gibt keinen Zugriffsfehler am Ende?
Wenn du über den String zugreifst, dann mußt du neben #0 auch Length beachten, denn wenn kein #0 im String vorkommt, kommt es bei aktiver Indexprüfung zu einem Fehler.
Über einen Cast nach PChar kannst du auch "sicher" zwei 2 Zeichen hinter das String-Ende zugreifen.

Ein Leer-String ist eigentlich NIL, aber Delphi-Referenz durchsuchenPChar(S) leitet bei '' auf eine "Ersatz"-Konstante um welche aus #0#0 besteht, womit es dann immer ein #0 als Ende gibt. (außer jemand hat über einen BufferOverflow dieses zerschossen)


PS: Zwei #0 als Ende, weil es im Windows auch ein Art StringList / Array gibt, wo Strings per #0 getrennt sind und das Ende der Liste als #0#0 definiert ist (also ein leerer String '' ist das Ende)
Und zusällig wird dieses auch in der Delphi-RTTI verwendet, z.B. für die Namen in Enums. (weswegen man hier auch keine RTTI für Enums bekommt, wo Werte übersprungen werden )
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (12. Aug 2020 um 15:03 Uhr)
  Mit Zitat antworten Zitat