AGB  ·  Datenschutz  ·  Impressum  







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

Unterschied? (PChar)

Ein Thema von Pseudemys Nelsoni · begonnen am 16. Sep 2003 · letzter Beitrag vom 16. Sep 2003
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Unterschied? (PChar)

  Alt 16. Sep 2003, 02:58
hi,

da ich gelesen hab das eine variable vom Typ PChar immer gleich gross ist, frage ich mich was der unterschied zwischen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  p: PChar;
begin
  p := 'bla';
  ShowMessage(p);
end;
und:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  p: PChar;
begin
  p := StrNew('bla');
  ShowMessage(p);
  StrDispose(p);
end;
bzw was der vorteil an letzterem sein soll?

Meine zweite frage ist, wozu es PChar überhaupt gibt, kann es irgendwas, was mit nem String nicht geht?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#2

Re: Unterschied? (PChar)

  Alt 16. Sep 2003, 07:20
Moin.

Kann man nicht wirklich vergleichen, denke ich.

Ein String ist eine Zeichenkette. Eine Art Array, beginnend mit dem Index 0 und das ende wird markiert durch NULL (nullterminierte Strings).

PChar ist ein Zeiger (Pointer) auf einen Char-Wert.

Kannst ausführlich in der Hilfe nachlesen.

Bis denne...
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

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

Re: Unterschied? (PChar)

  Alt 16. Sep 2003, 10:55
Seit Delphi 2 sind die Strings in Delphi auch nur mehr Zeiger auf die Zeichenkette (-> SizeOf(String) = 4!!). Außerdem hat das erste Zeichen den Index 1 und das letzte Zeichen den Index Length(String)! Der einzige Unterschied ist, dass die Delphi-Strings noch 2 interne Zähler mitführen (Längenzähler und Referenzzähler). Natürlich erleichtert der Compiler die Arbeit mit den Delphi-Strings enorm, da er automatisch alle möglichen nötigen Zwischenschritte komplett transparent vornimmt und man sich so nicht mehr darum kümmern muss. Aber vom Aufbau her sind Delphi-Strings und PChars gar nicht so unähnlich..!
Manuel Pöter
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Unterschied? (PChar)

  Alt 16. Sep 2003, 11:03
Hi,
wie bereits gesagt, ist ein PChar ein Pointer auf ein Character.
Zu bemerken ist, dass ein PChar, immer so groß ist wie die Speicheradresse (wenn ich mich nicht täusche, dann ist das 4 Byte).

Ein Pointer ist also eigentlich ein integer, in dem die Speicheradresse zum eigentlichen Inhalt liegt.

Chris

PS: So habe ich es zumindest gelernt.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: Unterschied? (PChar)

  Alt 16. Sep 2003, 11:04
danke für die beschreibung . kann mir dann noch jemand sagen was der unterschied zwischen meinen 2 beispielen ist?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

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

Re: Unterschied? (PChar)

  Alt 16. Sep 2003, 13:47
@Chakotay: korrekt.. Windows kann 4GB Speicher adressieren (2^32 Bytes), um also denn gesamten Speicher adressieren zu können braucht man einen Zeiger mit 32Bit "Bandbreite". Und 32Bit sind eben 4 Bytes...

@silent: der Unterschied...
Dank der erweiterten String-Syntax reserviert Delphi im ersten Beispiel den Speicher selbst (völlig transparent), wogegen du im 2ten Beispiel diesen Schritt selbst machst. Und nachdem du den Speicher selbst reservierst musst du (was du auch brav getan hast ) den Speicher auch selbst wieder freigeben...
Manuel Pöter
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: Unterschied? (PChar)

  Alt 16. Sep 2003, 13:56
Zitat von Motzi:
Dank der erweiterten String-Syntax reserviert Delphi im ersten Beispiel den Speicher selbst (völlig transparent)
Du redest hier von strings. silent hat aber auch im ersten Beispiel einen PChar.

Im ersten Beispiel setzt der Compiler den PChar p auf die Adresse, an der die hard-coded Zeichenkette 'bla' steht. Und diese liegt in einem schreibgeschützten Speicherbereich. Es wird also kein Speicher durch Compiler Magic reserviert.
Folgendes Beispiel verdeutlicht das am besten:
Delphi-Quellcode:
var
  P: PChar;
begin
  P := 'Test';
  P[0] := 'F'; // <-- Schutzverletzung.
end;
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

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

Re: Unterschied? (PChar)

  Alt 16. Sep 2003, 14:12
Ich rede von der "erweiterten String-Syntax", nicht von Strings allgemein. Die erweiterte String-Syntax erleichtert das Arbeiten mit Kombinationen Strings <-> PChars...

Allerdings könntest du damit recht haben, dass kein Speicher reserviert wird.. anscheinend hab ich da was falsch in Erinnerung.. *grübel*
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#9

Re: Unterschied? (PChar)

  Alt 16. Sep 2003, 14:53
danke , gut erklärt
Mario
MSN: cyanide@ccode.de
  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 13:37 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