Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: String-Ende mit while finden

  Alt 12. Aug 2020, 14:49
ShortString (der erste Delphi-String hat im Char [0] sein LängenByte)

LongString im Delphi (String, bzw. AnsiString und Nachfahren ala UTF8String, sowie UnicodeString) und auch der WideString (Interne Weiterleitung zur MSDN-Library durchsuchenSysAllocString-API)
gibt es einen Integer vor den Chars (ein Record im negativen Index, mich Length, CodePage, RefereceCount und CharSize)
Und nach dem letzten Char gibt es noch implizit zwei #0.

#0 als StringEnde wird implitzt für "einfache" Castas zu PChar untersützt, aber der String selber reagiert ausschließlich auf die Längenangabe.


Man kann nach PChar casten und APIs ala MSDN-Library durchsuchenStrEnd benutzen.
Oder wenn man einfach nur abschneiden will, dann die impliziten String-Funktionen für PChar->String nutzen.
S := PChar(S);


Zitat:
LongWord/LongInt/Integer
Delphi verwendet überall Integer (LongInt) als Länge und Index.

Leider auch dann, wenn man für 64 Bit kompiliert. (k.A. warum hier jemand auf diese saudämliche Idee gekommen ist)
Ansonsten wäre NativeInt der passende Typ gewesen.
Denn intern ist String eigentlich nur ein aufgemotztes dynamische Array und dessen Length ist als NativeInt deklariert, womit unter 64 Bit diese Typen nicht mehr kompatibel sind.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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