MoveMemory、CopyMemory 的功能類似, 都是復(fù)制內(nèi)存, 都是調(diào)用 Move 過程;
MoveMemory、CopyMemory 操作指針; Move 操作實(shí)體.
還要注意, 它們的參數(shù)位置不一樣!
舉例:
{例1}
var
buf1,buf2: array[0..9] of AnsiChar;
begin
buf1 := '0123456789';
buf2 := 'abcdefghij';
Move(buf2[2], buf1[4], 5);
ShowMessage(buf1); {0123cdefg9}
ShowMessage(buf2); {abcdefghij}
end;
{例2}
var
buf1,buf2: array[0..9] of AnsiChar;
begin
buf1 := '0123456789';
buf2 := 'abcdefghij';
CopyMemory(@buf2[2], @buf1[4], 5);
ShowMessage(buf1); {0123456789}
ShowMessage(buf2); {ab45678hij}
end;
{例3}
var
s1,s2: TStringStream; {兩個(gè)字符串流}
begin
s1 := TStringStream.Create;
s2 := TStringStream.Create;
{向第一個(gè)字符串流寫入}
s1.WriteString('萬一的 Delphi 博客');
ShowMessage(s1.DataString); {萬一的 Delphi 博客}
{設(shè)置第二個(gè)字符串流的大小}
s2.SetSize(6);
{從第一個(gè)流復(fù)制到第二個(gè)流}
CopyMemory(s2.Memory, s1.Memory, s2.Size);
ShowMessage(s2.DataString); {萬一的}
s1.Free;
s2.Free;
end;
這里僅僅是為了測(cè)試, 如果真的使用 TMemoryStream、TStringStream 等流類, 它們自身提供的復(fù)制操作更方便.