AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer(MyString)^ vs MyString[1] ?

Ein Thema von Dani · begonnen am 27. Sep 2004 · letzter Beitrag vom 28. Sep 2004
Antwort Antwort
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

Pointer(MyString)^ vs MyString[1] ?

  Alt 27. Sep 2004, 19:28
Hi!

Ist es egal, welches dieser beiden Kontrukte ich benutze oder gibt es irgendwelche Risiken bei MyString[1]?

Beispiel:

Delphi-Quellcode:
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;
Gruß,
Dani
Dani H.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#2

Re: Pointer(MyString)^ vs MyString[1] ?

  Alt 27. Sep 2004, 19:42
Beide Varianten sind nicht sonderlich sicher. Am 'besten' ist ein Cast auf PChar.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Pointer(MyString)^ vs MyString[1] ?

  Alt 27. Sep 2004, 20:09
Hmm, was genau kann da denn schiefgehen? Die Pointer(s)^ - Methode wird z.B. in den Borland VCL-Sourcen benutzt...
Dani H.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Pointer(MyString)^ vs MyString[1] ?

  Alt 28. Sep 2004, 06:22
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.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Pointer(MyString)^ vs MyString[1] ?

  Alt 28. Sep 2004, 17:51
Auf alle 3 Arten einen String nach PChar zu casten gehe ich in meinem String-Tutorial unter www.manuel-poeter.de ein und zeig welche Hintergrundarbeiten Delphi dabei erledigt...
Manuel Pöter
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#6

Re: Pointer(MyString)^ vs MyString[1] ?

  Alt 28. Sep 2004, 18:51
Zitat von Robert Marquardt:
PChar() ist kein Typecast sondern eine Funktion.
Hm? Ich würde das ja eher Compiler Magic nennen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr.
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