Delphi-PRAXiS

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.

ripper8472 16. Okt 2005 23:40

Re: 2 PChar´s vergleichen
 
mit a>b werden nur zeiger verglichen, also identitaet.

mit a^>b^ werden theoretisch nur die ersten buchstaben der strings verglichen, weil ein pchar auf einen char, also ein einziges zeichen zeigt. demnach sollte die dereferenzierung auch nur ein zeichen ergeben.

LoRd-MuldeR 16. Okt 2005 23:57

Re: 2 PChar´s vergleichen
 
Welchen Grund gibt es, in dem Beispiel aus dem ersten Post, überhaupt mit Pointern zu arbeiten? Mit Strings wäre das ganze doch einfach und sicher zu lösen.

sniper_w 16. Okt 2005 23:58

Re: 2 PChar´s vergleichen
 
Zitat:

(pchars sind ja zeiger auf speicher, wo die eigentlichen zeichenketten liegen).
Das ist mir klar, das war auch nicht die Frage ;).
Zitat:

in c wuerde man strcmp() auf die beiden zeiger anwenden.
Eher nicht, denn ich will char * vergleichen und nicht char. In c würde man 2 char * so vergleichen wie eben in Delphi.


EDIT:
Zitat:

Welchen Grund gibt es, in dem Beispiel aus dem ersten Post, überhaupt mit Pointern zu arbeiten? Mit Strings wäre das ganze doch einfach und sicher zu lösen.
Und ich Frage mich was ist das Zweck des Lebens.... :roll:

ripper8472 17. Okt 2005 00:04

Re: 2 PChar´s vergleichen
 
Zitat:

Zitat von sniper_w
Zitat:

in c wuerde man strcmp() auf die beiden zeiger anwenden.
Eher nicht, denn ich will char * vergleichen und nicht char. In c würde man 2 char * so vergleichen wie eben in Delphi.

genau umgedreht.

ich kann c, vertraue mir da mal.

strcmp() fuer strings, normales == fuer zeichen.

LoRd-MuldeR 17. Okt 2005 00:04

Re: 2 PChar´s vergleichen
 
Zitat:

Zitat von sniper_w
Zitat:

Welchen Grund gibt es, in dem Beispiel aus dem ersten Post, überhaupt mit Pointern zu arbeiten? Mit Strings wäre das ganze doch einfach und sicher zu lösen.
Und ich Frage mich was ist das Zweck des Lebens.... :roll:

Du darfst vom Leben keinen Zweck erwarten, es ist deine Aufgabe dem Leben einen Sinn zu geben :-D

@Topic:
Die Frage anders Formuliert, was genau soll das Programm da oben erreichen?

sniper_w 17. Okt 2005 00:44

Re: 2 PChar´s vergleichen
 
@LoRd-MuldeR und @ripper8472:
Code:
#include <stdio.h>

int main()
{
   char str[] = "AZsa";
   char *a,*b;

   a = str;
   b = str + 1;

   printf("%c %c  %d  %d\n", *a, *b, a, b);

   if (a<b)
   {
      printf("a < b\n");
   }
   else if (b<a)
   {
      printf("b < a\n");
   }
   else
   {
      printf("a = b\n");
   }
}
Das war mein Code in C, wollte es in Delphi umsetzten. ;)
Ich hatte also doch recht, in C werden char* genauso wie in Delphi verglichen.

ripper8472 17. Okt 2005 01:02

Re: 2 PChar´s vergleichen
 
damit vergleichst du in in beiden sprachen nur die pointer, nicht den inhalt.

sniper_w 17. Okt 2005 01:03

Re: 2 PChar´s vergleichen
 
Oh MENSCH !!! Das weiss ich ! Ich habe gesagt am Anfang "2 PChar´s vergleichen" und nicht 2 Char´s vergleichen !!!
Wer lesen kann, ist im Vorteil ;) .

SirThornberry 17. Okt 2005 06:00

Re: 2 PChar´s vergleichen
 
Da anhand des Betreffs und Inhalt des Thread es vermuten lässt das man die Strings die sich hinter den PChars verstecken vergleichen will post ich mal eine weitere Lösung um dies zu tun - so sollte es auch gehen (ungetestet)
Delphi-Quellcode:
if String(a) < string(b) then


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