![]() |
2 PChar´s vergleichen
Delphi-Quellcode:
Wenn ich also a und b vergleiche, heisst das, es werden eigentlich die Speicheraddressen zum Auswertung gebracht...Habe ich das richtig verstanden ?
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; |
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). |
Re: 2 PChar´s vergleichen
Bist du sicher, dass sich das:
Delphi-Quellcode:
ausführen läßt, ohne dass du zuvor Speicher für die PChar Variablen a und b angefordert hast?
a := @edit1.Text[1];
b := @edit1.Text[2]; |
Re: 2 PChar´s vergleichen
100% sicher, denn denn Speicher ist schon da, ich weise es nur zu.
|
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. |
Re: 2 PChar´s vergleichen
die Aussage
Zitat:
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.... |
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... |
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"... |
Re: 2 PChar´s vergleichen
Zitat:
|
Re: 2 PChar´s vergleichen
Ich frage mich die ganze Zeit schon, wieso du nicht einfach anstatt a>b zu schreiben, a^>b^ schreibst.
|
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. |
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.
|
Re: 2 PChar´s vergleichen
Zitat:
Zitat:
EDIT: Zitat:
|
Re: 2 PChar´s vergleichen
Zitat:
ich kann c, vertraue mir da mal. strcmp() fuer strings, normales == fuer zeichen. |
Re: 2 PChar´s vergleichen
Zitat:
@Topic: Die Frage anders Formuliert, was genau soll das Programm da oben erreichen? |
Re: 2 PChar´s vergleichen
@LoRd-MuldeR und @ripper8472:
Code:
Das war mein Code in C, wollte es in Delphi umsetzten. ;)
#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"); } } Ich hatte also doch recht, in C werden char* genauso wie in Delphi verglichen. |
Re: 2 PChar´s vergleichen
damit vergleichst du in in beiden sprachen nur die pointer, nicht den inhalt.
|
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 ;) . |
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 04:15 Uhr. |
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