Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - PChar in String


Akut-Programming - Do 21.08.03 10:40
Titel: PChar in String
:eyecrazy: Hey Leute! :?!?:

Ich hab ne wahrscheinlich sehr dumme Frage, aber ich muss sie stellen, da die Delphi Hilfe nur Müll anzeigt und in der Forumsuche zuviel raus kam und doch nichts dabei war. :autsch:

Wie wandle ich PChar in einen String um? Habs ja schon mit PCharToStr versucht, das funzt aber nich.

Falls es hilft, ich arbeite mit Delphi 5 Prof.
:oops:


neojones - Do 21.08.03 10:44

So: PChar(DeinePCharVariable)

D.h. praktisch gesehen:

Delphi-Quelltext
1:
DeineStringVariable := PChar(DeinePCharVariable);                    

Viele Grüße,

Matthias

P.S.: Auszug aus der Delphi-Hilfe:
Delphi-Hilfe hat folgendes geschrieben:
Konvertierungen langer Strings in PChar werden nicht automatisch durchgeführt. Aufgrund bestimmter Unterschiede zwischen Strings und PChars können bei Konvertierungen Probleme auftreten:

Lange Strings werden mit Referenzzählern verwaltet, PChars nicht.
Bei der Zuweisung an einen String werden die Daten kopiert, während ein PChar ein Zeiger auf eine Speicheradresse ist.
Lange Strings sind nullterminiert und enthalten zusätzlich eine Längenangabe, PChars sind einfach nullterminiert.

Dieser Abschnitt beschreibt Situationen, in denen diese Unterschiede zu schwer korrigierbaren Fehlern führen können.


Moderiert von user profile iconTino: Delphi- & Quote-Tags hinzugefügt.


derDoc - Do 21.08.03 13:46

Alternativ gibt es auch die Möglichkeit mit

Delphi-Quelltext
1:
Stringvariable := String(PCharvariable);                    

eine Konvertierung durchzuführen.


Akut-Programming - Do 21.08.03 13:52

Yo Danke! Habs hinbekomm.


Motzi - Do 21.08.03 13:54

PChars sind zu Strings zuweisungskompatibel - dh du kannst deinen PChar ganz einfach deinem String zuweisen (auch ohne Typecasting):

Delphi-Quelltext
1:
2:
3:
4:
5:
var
  p: PChar;
  s: String;

s := p;

Umgekehrt geht es icht so einfach... es gibt 3 Möglichkeiten einen String in einen PChar zu konvertieren:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  p: PChar;
  s: String;

p := PChar(s);
p := @s[1];
p := Pointer(s);

Je nachdem wie man castet werden intern noch zusätzliche Aktionen durchgeführt, aber das führt jetzt zu weit (und war ja auch nicht die eigentliche Frage).

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.