Delphi 的記憶體操作函式(5): 複製記憶體

sonicit發表於2014-09-07

MoveMemory、CopyMemory 的功能類似, 都是複製記憶體, 都是呼叫 Move 過程;

MoveMemory、CopyMemory 操作指標; Move 操作實體.

還要注意, 它們的引數位置不一樣!

{例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; {兩個字串流}
begin
  s1 := TStringStream.Create;
  s2 := TStringStream.Create;

  {向第一個字串流寫入}
  s1.WriteString('萬一的 Delphi 部落格');
  ShowMessage(s1.DataString); {萬一的 Delphi 部落格}

  {設定第二個字串流的大小}
  s2.SetSize(6);
  {從第一個流複製到第二個流}
  CopyMemory(s2.Memory, s1.Memory, s2.Size);
  ShowMessage(s2.DataString); {萬一的}

  s1.Free;
  s2.Free;
end;

這裡僅僅是為了測試, 如果真的使用 TMemoryStream、TStringStream 等流類, 它們自身提供的複製操作更方便.



 

轉自《萬一的Delphi部落格》

相關文章