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
SysAllocString-
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
StrEnd 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.