Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sowas wie "PChar" nur sollte es "nil" geben wenn & (https://www.delphipraxis.net/47803-sowas-wie-pchar-nur-sollte-es-nil-geben-wenn.html)

jbg 16. Jun 2005 18:04

Re: Sowas wie "PChar" nur sollte es "nil"
 
Zitat:

Zitat von Luckie
Probier mal:
Delphi-Quellcode:
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
Delphi-Quellcode:
@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:

Delphi-Quellcode:
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.

Luckie 16. Jun 2005 20:14

Re: Sowas wie "PChar" nur sollte es "nil"
 
Also hatte ich doch recht beim ersten mal. :roll:

Vjay 17. Jun 2005 09:28

Re: Sowas wie "PChar" nur sollte es "nil"
 
Zitat:

Zitat von Luckie
Also hatte ich doch recht beim ersten mal. :roll:

Tschuldigung, ich frag mich gerade was ich da gestern getestet habe.... Glaube es lag daran, dass der automatische Typecast in String nicht funktioniert hatte.

Delphi-Quellcode:
showMessage( strPas( pointer( s1 )));
Funktioniert jedenfalls.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz