Eigentlich müsste es bei Dynamischen Array immer mit ^ geschrieben werden, da es sich nicht mehr um Speicherbereich handelt,
sondern plötzlich um einen "Zeiger"...
Dann müsstest du auch strings immer mit ^ schreiben, denn die sind nichts anderes als dynamische Arrays of Char.
Also ich bin froh, dass man ^ mittlerweile in vielen Fällen (z.B. Zugriff auf Felder eines Record-Pointers) weglassen kann.
Na wer findet die
Exception?
Also wenn schon, dann richtig:
Delphi-Quellcode:
uses
System.Math;
type
TA = Array of AnsiChar;
TB = Array [0 .. 200] of AnsiChar;
var
A: TA;
B: TB;
S: ShortString;
begin
S := 'Cooler Text';
SetLength(A, 201);
Move(S[Low(S)], A[Low(A)], Min(Length(S) * SizeOf(S[Low(S)]), Length(A) * SizeOf(A[Low(A)])));
Move(S[Low(S)], B[Low(B)], Min(Length(S) * SizeOf(S[Low(S)]), Length(B) * SizeOf(B[Low(B)])));
end;
So funktioniert es mit statischen und dynamischen Arrays, unabhängig vom Startindex. Nur nicht mit ShortString, weil Low() hier eben 0 liefert und damit nach dem Move #11'CoolerTex' in A und B steht. Besoders schön / leserlich ist solcher Code natürlich auch nicht.