auf der sicheren Seite zu sein, verwenden Sie die Copy
Funktion auf dynamische Arrays, wie es auch die verwalteten Typen intern behandelt. Die Arrays vom gleichen Typ sein, dh im selben Ausdruck erklärt:
var
a, b: array of string;
oder durch einen benutzerdefinierten Array-Typen definieren:
type
TStringArray = array of string;
var
a: TStringArray;
//...and somewhere else
var
b: TStringArray;
dann können Sie tun:
a := Copy(b, Low(b), Length(b)); //really clean, but unnecessary
//...or
a := Copy(b, 0, MaxInt); //dynamic arrays always have zero low bound
//and Copy copies only "up to" Count items
Sie müssen eine Schleife auf statischen Arrays und beim Mischen von Array-Typen verwenden (nicht, dass ich es empfehlen würde).
Wenn Sie wirklich verwenden müssen, denken Sie daran, auf Null-Länge zu überprüfen, wie die A[0]
Konstrukte Bereich Überprüfung Fehler auslösen können, (mit der bemerkenswerten Ausnahme SizeOf(A[0])
, die von Compiler Magie behandelt wird und nie tatsächlich ausgeführt wird). Auch nie angenommen, dass A = A[0]
oder SizeOf(A) = Length(A) * SizeOf(A[0])
, da dies nur für statische Arrays wahr ist und es wird Sie wirklich schlecht beißen, wenn Sie später versuchen, riesige Codebasis zu dynamischen Arrays umzuformen.
Move verwendet eine for-Schleife. Zumindest hat es in Delphi 7 getan. Welcher Code hat den Fehler verursacht? –
Ich wusste das nicht. Verschieben und Kopieren beide verursachten einen Fehler. (Ich habe sie nicht zur gleichen Zeit verwendet) – Dian
Move verwendet keine for-Schleife. Es ist in asm geschrieben, sogar in Delphi 7, und verwendet entweder eine rep movsd/movsb mit Delphi 7 oder viel schnellere FPU-Anweisungen in neueren Delphi-Version. –