AGB  ·  Datenschutz  ·  Impressum  







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

Unterschied zwischen String und PChar

Ein Thema von stefan2005 · begonnen am 22. Feb 2005 · letzter Beitrag vom 23. Feb 2005
Antwort Antwort
stefan2005

Registriert seit: 30. Sep 2003
Ort: Puchheim
250 Beiträge
 
Delphi 6 Personal
 
#1

Unterschied zwischen String und PChar

  Alt 22. Feb 2005, 20:47
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
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#2

Re: Unterschied zwischen String und PChar

  Alt 22. Feb 2005, 20:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Unterschied zwischen String und PChar

  Alt 22. Feb 2005, 21:12
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
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Unterschied zwischen String und PChar

  Alt 23. Feb 2005, 08:32
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 von Oxmyx:
Der besitzt einen Speichermanager und einen Referenzzähler.
Nur AnsiString, nicht ShortString.

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.
  Mit Zitat antworten Zitat
runger
(Gast)

n/a Beiträge
 
#5

Re: Unterschied zwischen String und PChar

  Alt 23. Feb 2005, 09:05
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
  Mit Zitat antworten Zitat
Beckman

Registriert seit: 12. Jul 2004
205 Beiträge
 
#6

Re: Unterschied zwischen String und PChar

  Alt 23. Feb 2005, 09:16
das eine halt '#0', das andere chr(0);
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Unterschied zwischen String und PChar

  Alt 23. Feb 2005, 09:24
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
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Unterschied zwischen String und PChar

  Alt 23. Feb 2005, 09:26
Zitat von Kedariodakon:
...Gibts eigendlich einen PChar für WideStrings,...
Hmmm... PWideChar?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#9

Re: Unterschied zwischen String und PChar

  Alt 23. Feb 2005, 10:02
taucht auch als PWCHAR auf ... z.B. im MSDN ^^
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

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

Re: Unterschied zwischen String und PChar

  Alt 23. Feb 2005, 11:49
Detailierte Infos zu den ganzen String-Typen (abgesehen vom WideString) findest du in meinem String-Tutorial auf www.manuel-poeter.de ...
Manuel Pöter
  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 16:32 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