Delphi: Strings

Hallo,

Eine Frage zu den (lagen) Delphi-Strings: intern sind die ja scheinbar als nullterminiert implementiert, aber da ist doch sicherlich mehr dran, oder?
Ich meine, irgendwelche Hilfsvariablen, ein Zähler, oder ähnliches. Weiß jemand mehr?

mfG, Steffen

Hallo,

Eine Frage zu den (lagen) Delphi-Strings: intern sind die ja
scheinbar als nullterminiert implementiert, aber da ist doch
sicherlich mehr dran, oder?
Ich meine, irgendwelche Hilfsvariablen, ein Zähler, oder
ähnliches. Weiß jemand mehr?

Die 32 Bits vor dem ersten Zeichen des Strings geben dir Auskunft.

Um die Stringlänge zu ermitteln kannst Du folgende Routine verwenden:

function StrLength(const S: AnsiString): Longint;
var
P: Pointer;
begin
Result := 0;
if Pointer(S) nil then
begin
P := Pointer(Integer(Pointer(S)) - 4);
Result := Integer(P^) and (not $80000000 shr 1);
end;
end;

Gruss,
Matthias Thoma

aber null-terminiert sind die ned. Native Strings sind Referenzgezählt, wie Matthias gesagt hat, genau wie offene Arrays. Null-Terminiert sind nur pChar und BSTR (COM/OLE String)