Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 2 PChar´s vergleichen (https://www.delphipraxis.net/55112-2-pchar%B4s-vergleichen.html)

sniper_w 16. Okt 2005 22:34


2 PChar´s vergleichen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  var a, b : PChar;
begin
 caption := edit1.Text[1]+ '  '+edit1.Text[2];
 a := @edit1.Text[1];
 b := @edit1.Text[2];
 Memo1.Lines.Add('a = '+a^+' '+inttostr(Cardinal(Addr(a^)))+' '+inttostr(Cardinal(a)));
 Memo1.Lines.Add('b = '+b^+' '+inttostr(Cardinal(b)));
 if a<b then
   Memo1.Lines.Add('a<b is true')
 else if a>b then
   Memo1.Lines.Add('a>b is true')
 else
   Memo1.Lines.Add('a=b is true');
end;
Wenn ich also a und b vergleiche, heisst das, es werden eigentlich die Speicheraddressen zum Auswertung gebracht...Habe ich das richtig verstanden ?

ripper8472 16. Okt 2005 22:45

Re: 2 PChar´s vergleichen
 
hast du.
du wuerdest somit identitaet statt gleichheit testen.

in c wuerde man strcmp() auf die beiden zeiger anwenden.
(pchars sind ja zeiger auf speicher, wo die eigentlichen zeichenketten liegen).

Luckie 16. Okt 2005 22:53

Re: 2 PChar´s vergleichen
 
Bist du sicher, dass sich das:
Delphi-Quellcode:
a := @edit1.Text[1];
b := @edit1.Text[2];
ausführen läßt, ohne dass du zuvor Speicher für die PChar Variablen a und b angefordert hast?

sniper_w 16. Okt 2005 22:56

Re: 2 PChar´s vergleichen
 
100% sicher, denn denn Speicher ist schon da, ich weise es nur zu.

ripper8472 16. Okt 2005 23:00

Re: 2 PChar´s vergleichen
 
ein pchar ist nur ein zeiger. man kann ihn auf vorhandenen speicher zeigen lassen oder auf frisch angeforderten.
wer das wesen der pchars verstehen will, sollte sich unbedingt mit zeigern und den internen ablaeufen bei speichergeschichten beschaeftigen. eine portion C hilft auch.

Basilikum 16. Okt 2005 23:15

Re: 2 PChar´s vergleichen
 
die Aussage
Zitat:

Zitat von sniper_w
100% sicher

finde ich recht mutig in diesem Zusammenhang...
TEdit.Text bzw TControl.GetText() gibt lediglich einen temporären String zurück... es ist also eine Frage der Zeit, bis der Pointer ins nichts zeigt....

sniper_w 16. Okt 2005 23:18

Re: 2 PChar´s vergleichen
 
Nein, da liegst du falsch.
Ich bin mir sicher, denn in diesem trivialem Beispiel ist Edit1.Text immer NICHT leer...

ripper8472 16. Okt 2005 23:19

Re: 2 PChar´s vergleichen
 
man kann aber davon ausgehen, dass fuer die zeit der ereignismethode sich nichts aendert...

hast aber recht, die strings koennen kommentarlos verschwinden und schon hat man lustige fehler.

edit: "leer" ist was anderes als "woanders"...

Luckie 16. Okt 2005 23:21

Re: 2 PChar´s vergleichen
 
Zitat:

Zitat von ripper8472
hast aber recht, die strings koennen kommentarlos verschwinden und schon hat man lustige fehler.

Und eben deshalb, sollte man sich angewöhnen es sicher zu lösen, sonst fällt masn nämlich irgendwann mal auf die Schnauze und weiß nicht, wo man sich die blutige Nase geholt hat. ;)

faux 16. Okt 2005 23:23

Re: 2 PChar´s vergleichen
 
Ich frage mich die ganze Zeit schon, wieso du nicht einfach anstatt a>b zu schreiben, a^>b^ schreibst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz