查看: 323|回复: 2
打印 上一主题 下一主题

pascal的内存操作函数(5): 复制内存

[复制链接] qrcode

30

主题

31

帖子

94

积分

注册会员

Rank: 2

积分
94
楼主
跳转到指定楼层
发表于 2016-2-29 09:38 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 等流类, 它们自身提供的复制操作更方便. 
回复

使用道具 举报

2

主题

87

帖子

12

积分

新手上路

Rank: 1

积分
12
沙发
发表于 2016-2-29 09:49 PM | 只看该作者
楼主资料真多……
回复 支持 反对

使用道具 举报

0

主题

88

帖子

4

积分

新手上路

Rank: 1

积分
4
板凳
发表于 2016-4-1 02:37 PM | 只看该作者
谢谢分享,受教
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表