博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
memove 的实现
阅读量:2387 次
发布时间:2019-05-10

本文共 792 字,大约阅读时间需要 2 分钟。

补充下面函数代码: 
如果两段内存重叠,用memcpy函数可能会导致行为未定义。 而memmove函数能够避免这种问题,下面是一种实现方式,请补充代码。
#include 
using namespace std;void* memmove(void* str1,const void* str2,size_t n){    char* pStr1= (char*) str1;    const char* pStr2=(const char*)str2;    if  ( ) {        for(size_t i=0;i!=n;++i){            *(pStr1++)=*(pStr2++);        }    }    else{        pStr1+=n-1;        pStr2+=n-1;        for(size_t i=0;i!=n;++i){            *(pStr1--)=*(pStr2--);        }    }    return ( );}

正确答案: A   你的答案: D (错误)

pStr1< pStr2   str1
pStr1+n < pStr2   str2
pStr1+n < pStr2 || pStr2+n
pStr2+n

黑色曲线表示错误的拷贝方式,红色的曲线表示正确的拷贝方式。
黑色方块表示的是二者内存覆盖的区域
与 pstr*+n 没有关系
第一中选择分支对应的是图 1 中红色曲线的拷贝方式 (方向: pstr2 -> pstr1)
第二中选择分支  else ... 对应的是图 2 中红色曲线的拷贝方式
方向是 pstr2 -> pstr1

很清楚了,pstr1<pstr2时从头部开始复制,pstr1>pstr2从尾部开始复制

转载地址:http://ukiab.baihongyu.com/

你可能感兴趣的文章
停车费上涨需要公开“大数据”
查看>>
DirectFB代码导读
查看>>
冒号和他的学生们(连载13)——范式总结
查看>>
A Proposal on Organization of Information System
查看>>
正则表达式与文件格式化处理
查看>>
大型网站技术架构:核心原理与案例分析
查看>>
JAVA并发编程实战
查看>>
RabbitMQ实战++高效部署分布式消息队列
查看>>
cgroup使用--cpu资源限制
查看>>
cgroup使用--memory资源限制
查看>>
Redis 基础命令 --- String篇
查看>>
Redis 基础命令 --- Hash篇
查看>>
Redis 基础命令 --- Set篇
查看>>
Redis数据库篇 -- 生存时间
查看>>
面向对象设计基本原则
查看>>
Redis数据库篇 -- 事务
查看>>
hadoop 完全分布式环境搭建
查看>>
hadoop 完全分布式HA高可用集群(手工切换)搭建
查看>>
hadoop 完全分布式HA高可用集群(自动切换)搭建
查看>>
Hbase shell常见命令
查看>>