複製內存

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 等流类, 它们自身提供的复制操作更方便.

你可能感兴趣的:(複製內存)