如何合并两个动态数组 ( 积分: 50 )

  • 主题发起人 主题发起人 catcatdogdog
  • 开始时间 开始时间
C

catcatdogdog

Unregistered / Unconfirmed
GUEST, unregistred user!
除了用循环一个元素一个元素赋值的方法外,有没有更快的方法?
类似于String中的Concat
 
除了用循环一个元素一个元素赋值的方法外,有没有更快的方法?
类似于String中的Concat
 
可以用CopyMemory,把一个数组拷贝到另一个数组的增加部分.
 
procedure TForm1.Button1Click(Sender: TObject);
var
buf:array of char;
buf2:array of char;
i,len:Integer;
begin
len:=10;
setlength(buf,len);
setlength(buf2,len);
for i:=low(buf) to high(buf) do
buf:='A';
for i:=low(buf2) to high(buf2) do
buf2:='B';

setlength(buf,len*2);
copymemory(@buf[len],@buf2[0],len*2);
showmessage(buf[21]);
end;
 
to Avalon:
为什么我复制以后目标数组会少了一个元素呢。缺了最后一个。

procedure TForm1.Button1Click(Sender: TObject);
var
A, B: Array of String;
i: Integer;
begin
SetLength(A, 10);
SetLength(B, 5);

for i := Low(A) to High(A) do
A := 'A' + IntToStr(i);

for i := Low(B) to High(B) do
B := 'B' + IntToStr(i);

SetLength(A, 15);
CopyMemory(@A[10], @B[0], 15);

ShowMessage(IntToStr(Length(A)))
//此处显示长度为15

for i := Low(A) to High(A) do
Memo1.Lines.Add(A)
//最后Memo1中少了一个'B4',但多了一行空格。B[4]变成空格了?
end;
 
CopyMemory(@A[10], @B[0], High(B)*4);
 
CopyMemory最后的参数我一开始搞错了
不是个数 是Specifies the size, in bytes, of the block of memory to copy
 
CopyMemory(@A[10], @B[0], (High(B)+1)*4);
 
多人接受答案了。
 

Similar threads

回复
0
查看
816
不得闲
回复
0
查看
699
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部