Zitat von
Luckie:
Probier mal:
Pointer(s);
Zu mindest ersteres sollte nil zurückgeben, wenn ich es richtig in Erinnerung habe.
Das tut es auch.
PChar(S) ruft eine System-Funktion auf, die folgendes macht:
Delphi-Quellcode:
function StrToPChar(const S: string): PChar;
const
EmptyPChar: PChar = #0;
begin
Result := Pointer(S);
if Result = nil then
Result := EmptyPChar;
end;
Wie man sieht, wird hier Pointer(S) benutzt, was entweder einen Zeiger auf das erste Zeichen oder bei einem Leerstring den Wert
nil zurückliefert.
Zitat:
Oder
@s[1];
Da passiert etwas mehr. Zum einen wird vorerst mal die Prozedur
UniqueString aufgerufen, die ggf. den gesamten String kopiert, wenn der Referenzzähler = -1 (Konstante) oder > 1 (mehrere String referenzieren auf die Daten) ist.
Zudem dürfte es bei eingeschalteter Breichsüberprüfung bei einem Leerstring krachen.
Zitat:
Pointer(s[1])
Das ist nun vollkommen falsch. Damit bekommt man einen Zeiger der Form $000000xx, weil man das erste Zeichen des String (=Char) in einen Zeiger typecastet.