AW: String und PChar frage
21. Aug 2022, 13:42
Der Delphi-String (die LongStrings) ist intern so gebaut, dass es kompatibel zum PChar ist.
Er arbeitet zwar mit einem Längenbyte (Integer), aber hat dennoch zusätzlich auch noch zwei #0 hinter dem String-Ende liegen, weswegen sich String direkt nach PChar casten lässt.
Also ja, man könnte solche Parameter tauschen, aber nur für Lesezugriffe.
Achtung, PChar als Parameter-Typ hat bei einem Leerstring teilweise ein Problem,
denn wenn man einen Parameter nicht übergeben will, dann wird oft NIL verlangt,
aber der PChar-Cast im Delphi hat eine Besonderheit.
Bei einem Leerstring ''
ist der String im Delphi zwar NIL,
aber der Cast gibt in diesem Fall nicht das NIL raus, sondern den Zeiger auf eine "existierende" Stringkonstante mit leerem Text, also auf zwei #0 (''#0#0
bzw. #0#0
) und nicht auf NIL.
In diesem Fall würde der umgeschriebene Parameter auf String eventuell das "oft" (nicht immer) bessere Ergebnis liefern.
Ebenso kann man bei einem Cast von String auf PChar mit Pointer(S)
statt PChar(S)
arbeiten.
Bei Pointer muß man aber aufpassen, dass mn nicht PChar/PAnsiChar/PWideChar verwechselt, weil der Compiler dort keine Typprüfung machen kann, mit der bekannten Warnung.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
Geändert von himitsu (21. Aug 2022 um 13:49 Uhr)
|