![]() |
Pointer(MyString)^ vs MyString[1] ?
Hi!
Ist es egal, welches dieser beiden Kontrukte ich benutze oder gibt es irgendwelche Risiken bei MyString[1]? Beispiel:
Delphi-Quellcode:
Gruß,
procedure foo;
var FS: TFileStream; s: String; begin s := 'Delphi-PRAXiS'; FS := TFileStream.Create('C:\foo.str', fmCreate or fmShareExclusive); FS.Write(s[1], Length(s)); FS.Write(Pointer(s)^, Length(s)); end; Dani |
Re: Pointer(MyString)^ vs MyString[1] ?
Beide Varianten sind nicht sonderlich sicher. Am 'besten' ist ein Cast auf PChar.
|
Re: Pointer(MyString)^ vs MyString[1] ?
Hmm, was genau kann da denn schiefgehen? Die Pointer(s)^ - Methode wird z.B. in den Borland VCL-Sourcen benutzt...
|
Re: Pointer(MyString)^ vs MyString[1] ?
PChar() ist kein Typecast sondern eine Funktion.
Der Leerstring in Delphi wird naemlich durch nil dargestellt. PChar() stellt sicher das in diesem Fall ein C-Leerstring vorhanden ist. Zusatzlich wird oft auch noch ein UniqueString aufgerufen, um sicherzustellen das ein schreibfaehiger String vorhanden ist. Die Aufrufe in den Delphi-Sourcen sind also wahrscheinlich aus Effizienzgruenden mit Pointer realisiert. Es sollten entsprechend Sicherheitschecks gemacht werden. |
Re: Pointer(MyString)^ vs MyString[1] ?
Auf alle 3 Arten einen String nach PChar zu casten gehe ich in meinem String-Tutorial unter
![]() |
Re: Pointer(MyString)^ vs MyString[1] ?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz