Zitat von
Sprint:
Delphi trickst da nicht. PChar ist nun mal ein Pointer und kein String. Wenn du str1^ mit str2^ vergleichst, dann macht Delphi Compiler Magic und vergleicht zwei Strings bzw. MemCmp.
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^
wird nur scheinbar funktionieren. Tatsächlich liefert dieser Vergleich True zurück, aber nicht etwa weil Delphi die beiden Strings vergleicht. Sondern weil str1^ und str2^ eben keine Strings, sondern Chars sind (in dem Fall mit dem Wert '1'). Und Chars kann man wunderbar vergleichen.
Es bleibt dabei: Beim Vergleich von Strings trickst der Delphi-Compiler, jedoch nur, wenn der String bereits zur Kompilierzeit erstellt wird. In anderen Fällen wird der Vergleich fehlschlagen.
In C/C++ wird so ein Vergleich übrigens niemals Erfolg haben, auch wenn man einen String bereits im Code zuweist.
Nachtrag:
Ein "String" ist nichts anderes als ein Zeiger auf einen reservierten Speicherbereich, in dem Zeichen stehen. Deshalb ist
sizeof(beliebiger String) ja auch 4, also die Größe eines Zeigers.