Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unterschied zwischen String und PChar (https://www.delphipraxis.net/40894-unterschied-zwischen-string-und-pchar.html)

stefan2005 22. Feb 2005 20:47


Unterschied zwischen String und PChar
 
Hi,
ich würde gerne wissen, was genau der Unterschied zwischen einem Pascal String und einem PChar (von Windows bzw. C++) ist und wieso diese nicht (meistens zumindest, z.B. bei DLLs) kompatibel zueinander sind ?

Ein String müsste doch eigentlich genauso ein Pointer auf einen Speicher mit den Zeichen sein, oder ?

cu,
stefan2005

Oxmyx 22. Feb 2005 20:55

Re: Unterschied zwischen String und PChar
 
string (eigentlich nur ein Alias von AnsiString bzw. ShortString) ist ein Compiler-Feature von Delphi. Der besitzt einen Speichermanager und einen Referenzzähler. Man kann mit einem Delphi-String auch einen direkten Vergleich machen, also "if string1 = strin2 then...".
PChar ist offiziell nur ein Zeiger auf ein Char. Delphi verwendet hier auch einige Tricks, wenn ein Stringliteral schon zur Kompilierzeit existiert, aber generell besitzt ein PChar nicht die Features eines Delphi-Strings. Soweit ich weiß zählt Delphi hier keine Referenzen, und auch ein Vergleich ist nur mithilfe einer Funktion möglich, "if pchar1 = pchar2 then..." wird nicht funktionieren.

Binärbaum 22. Feb 2005 21:12

Re: Unterschied zwischen String und PChar
 
Ein PChar ist nur ein Zeiger auf einen Char. Von dieser Stelle an wird solange weiter gelesen, bis man auf #0 (nicht als Zeichen, sondern als Wert) stößt. Dort ist der PChar zuende. Da ein PChar immer mit einer solchen Null beendet wird, spricht man auch von null-terminierten Zeichenketten.
Die Short-Strings von Delphi haben hingegen im ersten Byte einen Zähler, der die Länge angibt.

MfG
Binärbaum

IngoD7 23. Feb 2005 08:32

Re: Unterschied zwischen String und PChar
 
Zitat:

Zitat von Oxmyx
string (eigentlich nur ein Alias von AnsiString bzw. ShortString) ist ein Compiler-Feature von Delphi.

AnsiString und ShortString sind aber nicht dasselbe. Was von beiden String darstellt, hängt von der Compilerdirektive $H ab. Defaultmäßig ist String ein AnsiString.

Zitat:

Zitat von Oxmyx
Der besitzt einen Speichermanager und einen Referenzzähler.

Nur AnsiString, nicht ShortString.

Zitat:

Zitat von Binärbaum
Ein PChar ist nur ein Zeiger auf einen Char. Von dieser Stelle an wird solange weiter gelesen, bis man auf #0 (nicht als Zeichen, sondern als Wert) stößt. Dort ist der PChar zuende. Da ein PChar immer mit einer solchen Null beendet wird, spricht man auch von null-terminierten Zeichenketten.
Die Short-Strings von Delphi haben hingegen im ersten Byte einen Zähler, der die Länge angibt.

Ergänzung: AnsiString hat vor seinem eigentlichen Inhalt im Speicher 4 Byte für die Längenangabe und 4 Byte für die Referenzzählung. Das ist aber für die normale Verwendung von String unerheblich.

Normalerweise benutzt man also String anstatt PChar. Da, wo PChar Pflicht ist, stolpert man ggf. früh genug. :mrgreen:

runger 23. Feb 2005 09:05

Re: Unterschied zwischen String und PChar
 
Hallo,

Zitat:

bis man auf #0 (nicht als Zeichen, sondern als Wert)
wo bitte ist da der Unterschied? Was ist #0 als Zeichen und was ist #0 als Wert?
Entschuldige: aber was für ein Stuss!

Rainer

Beckman 23. Feb 2005 09:16

Re: Unterschied zwischen String und PChar
 
das eine halt '#0', das andere chr(0);

Kedariodakon 23. Feb 2005 09:24

Re: Unterschied zwischen String und PChar
 
Bei der Frage, frage ich gleichmal mit:
Gibts eigendlich einen PChar für WideStrings, um sie z.B. In einer DLL zu exportieren?
Oder wie macht man das?

Bye

Sharky 23. Feb 2005 09:26

Re: Unterschied zwischen String und PChar
 
Zitat:

Zitat von Kedariodakon
...Gibts eigendlich einen PChar für WideStrings,...

Hmmm... PWideChar?

himitsu 23. Feb 2005 10:02

Re: Unterschied zwischen String und PChar
 
taucht auch als PWCHAR auf ... z.B. im MSDN ^^

Motzi 23. Feb 2005 11:49

Re: Unterschied zwischen String und PChar
 
Detailierte Infos zu den ganzen String-Typen (abgesehen vom WideString) findest du in meinem String-Tutorial auf www.manuel-poeter.de ... :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:42 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