Forum: Sonstige Fragen zu Delphi
Delphi
by Oxmyx,
21. Feb 2005
Falsch. In meinem Beispiel zeigen str1 und str2 auf einen Speicherbereich, der '1234' enthält. Ein Vergleich:
if str1 = str2
wird fehlschlagen.
Dein Vorschlag:
if str1^ = str2^
Forum: Sonstige Fragen zu Delphi
Delphi
by Oxmyx,
21. Feb 2005
Genau das wollte ich doch zeigen. Nämlich, dass man mal auf die Schnauze fallen kann, wenn einem nicht bewusst ist, das Delphi hier trickst. Deshalb sagte ich ja, auf der sicheren Seite ist man auf jeden Fall mit strcmp bzw. CompareStr. Damit sind solche Fehler ausgeschlossen.
Forum: Sonstige Fragen zu Delphi
Delphi
by Oxmyx,
21. Feb 2005
Ok, ein Detailfehler. Dennoch: Auch wenn man 5 Bytes reserviert und eine #0 anhängt, liefert ein Vergleich immer noch False zurück.
Forum: Sonstige Fragen zu Delphi
Delphi
by Oxmyx,
21. Feb 2005
Doch. Da stehen zu 100% die selben Bytes drin.
Forum: Sonstige Fragen zu Delphi
Delphi
by Oxmyx,
21. Feb 2005
Ok, da denkt der Delphi-Compiler noch mit. Aber das hier funktioniert bei mir nicht mehr:
var
str0, str1, str2: PChar;
begin
str0 := '1234';
GetMem(str1, 4); ZeroMemory(str1, 4);
GetMem(str2, 4); ZeroMemory(str2, 4);
Move(str0^, str1^, 4);
Forum: Sonstige Fragen zu Delphi
Delphi
by Oxmyx,
21. Feb 2005
Das geht aber auch nur, weil der Delphi-Compiler da automatisch eine entsprechende Funktion aufruft. Folgendes funktioniert nämlich nicht:
var
str1, str2: PChar;
begin
str1 := '1234';
str2 := '1234';
if str1 = str2 then begin
// dies wird niemals ausgeführt!
Forum: Sonstige Fragen zu Delphi
Delphi
by Oxmyx,
21. Feb 2005
So geht's:
if StrToInt(Label4.Caption) <= StrToInt(Label2.Caption) then begin
//...
end;
Wenn du das ganze ohne StrToInt versuchst, vergleichst du wahrscheinlich, ob der eine Zeiger kleiner ist als der andere, und das kann theoretisch immer so sein.