Forum: FreePascal
by jaenicke,
16. Jun 2009
Ach so meinst du das. Dann bleibt dir nur die Typisierung oder ein Vergleich des Speichers:program Project196;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
const1 = 'HALLO'#0#0#0;
const2: array of AnsiChar = 'HALLO'#0#0#0;
Forum: FreePascal
by jaenicke,
16. Jun 2009
Ja, aber was machst du denn mit Arrays? Warum keine normalen ShortStrings? (Strings gehen zwar auch, würden aber bei falscher Länge keinen Fehler produzieren.)
Da wird korrekt verglichen, da die Länge nicht erst bestimmt wird wie bei der Umwandlung aus dem Array.const
a: String = 'Test'#0#0#0#0#0#0;
var
b: String = 'Test'#0#0#0#0#0#1;
c: String = 'Test'#0#0#0#0#0#0;
d: String;...
Forum: FreePascal
by jaenicke,
16. Jun 2009
Ich würde generell keine Nullzeichen in Strings verwenden.
Aber solange keine Arrays mit den damit verbundenen Umwandlungen verwendet werden, sollte es ja klappen.
Wenn die Arrays notwendig sind, bleiben wohl nur direkte Speicheroperationen um damit zu arbeiten. Aber wozu sind die denn nötig, gibt es da einen zwingenden Grund?
Forum: FreePascal
by jaenicke,
15. Jun 2009
Also: Was passiert ist folgendes:
Zuerst wird LStrFromArray aufgerufen. Was macht das? Es wandelt foo in einen String um. Dessen Länge ist aber 5, da danach nur noch Nullen kommen.
So, jetzt wird LStrCmp aufgerufen. Das geht 5 Zeichen durch und merkt, dass die alle identisch sind. Da aber die Länge unterschiedlich war, war der Vergleich dennoch nicht erfolgreich.
Die unterschiedlichen Längen...
Forum: FreePascal
by jaenicke,
15. Jun 2009
Das ist die integrierte Assembleransicht von Delphi, ja. Dort kannst du ja auch normal Haltepunkte setzen etc.
Ich werde gleich kurz schauen.
// EDIT: Der rote Kasten macht Urlaub. :mrgreen: