当前位置: 首页 > news >正文

栾城区住房建设局官方网站公众号平台网页版

栾城区住房建设局官方网站,公众号平台网页版,一站式服务的好处,免费模型网站目录 memcpy使用和模拟实现memmove使用和模拟实现memset使用memcmp使用 1. memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num) ; 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存的位置这个函数在遇到…目录 memcpy使用和模拟实现memmove使用和模拟实现memset使用memcmp使用 1. memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num) ; 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存的位置这个函数在遇到\0的时候并不会停下来如果source和destination有任何的重叠,复制的结果都是未定义的 1.1 使用 int arr1[] {1,2,3,4,5,6,7,8,9,10}; int arr2[10] { 0 }; memcpy(arr2,arr1,20);int i 0; for (i 0; i 10; i) {printf(%d , arr2[i]); }拷贝arr1前5个数到arr2里 输出: 1.2 模拟实现 void* my_memcpy(void * dest,const void * src,size_t num) {void* ret dest;assert(dest);assert(src);while (num--) {*(char*)dest *(char*)src;dest (char*)dest 1;src (char*)src 1;}return ret; }2. memmove使用和模拟实现 void * momove ( void* destination , cosnt void* source , size_t num) ; 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的如果源空间和目标空间出现重叠,就得用memmove函数处理 2.1 使用 先看下面的代码 int arr1[] {1,2,3,4,5,6,7,8,9,10}; int arr2[10] { 0 }; my_memcpy(arr13,arr1,20);int i 0; for (i 0; i 10; i) {printf(%d , arr1[i]); }上面是想从arr13也就是从4开始的位置复制5个数据也就是1,2,3,1,2,3,4,5,9,10。但最后的结果却不是这样的原因就是当到重叠的位置时数据已经被之前复制的覆盖过了源数据已经被改变所以出现错误 输出 这时换成memove函数试试 int arr1[] {1,2,3,4,5,6,7,8,9,10}; int arr2[10] { 0 }; memmove(arr13,arr1,20);int i 0; for (i 0; i 10; i) {printf(%d , arr1[i]); }输出 2.2 实现 对于一般的情况,我们直接拷贝数据就行,和memcpy一样。当数据有重叠时可以分为三种情况 第一种目标地址desc在源空间src的左边 这种情况下需要拷贝的数据在拷贝之前不会被覆盖,从前往后拷贝 第二种,目标地址desc在srcnum中间,这种情况从前向后拷贝时原值会被替换,所以要从后往前拷贝 第三种,目标地址在src的右边,这个时候从左到右拷贝或从右到左都行 void* my_memmove(void * dest,const void * src,size_t num) {assert(dest);assert(src);void* ret dest;//从前往后拷if (dest src || (char*)dest ((char*)srcnum)) {while (num--) {*(char*)dest *(char*)src;dest (char*)dest 1;src (char*)src 1;}}//从后往前拷else {dest (char*)dest num - 1;src (char*)src num - 1;while (num--) {*(char*)dest *(char*)src;dest (char*)dest - 1;src (char*)src - 1;}}return ret; }3. memeset函数使用 void * memeset ( void * ptr, int value , size_t num) ; memeset是用来设置内存的,将内存中的值以字节为单位设置为想要的内 char str[] hello world; memset(str,x,6); printf(str);将字符串的前6个字符改为x 输出: 4. memcmp函数的使用 int memcmp ( cosnt void * ptr1, const void * ptr2, size_t num) ; 比较从ptr1和ptr2开始,向后num个字节的内容返回值如下: char buffer1[] DWgaOtP12df0; char buffer2[] DWGaOtP12df0; int n; n memcmp(buffer1,buffer2,sizeof(buffer1));printf(%d , n);上面的两个字符串,其中g小写和大写,由于小写的值更大,所以会返回大于0的数 输出:
http://www.yutouwan.com/news/307081/

相关文章:

  • 贵州三线建设博物馆网站网站建设教材
  • 在线做静态头像的网站注册一个公司需要哪些资料
  • 做虚拟主机网站十大ppt模板免费下载网站
  • 微网站免费制作公司培训课程有哪些
  • 数据中心网站模板买源码做网站
  • 网站怎么做第三方登录上海徽与章网站建设宗旨
  • 如何给自己公司做一个网站天堂 最新版中文在线
  • 如何建设网站pdf下载如何用front做网站网页
  • 网站建设学习哪家专业跨国网站浏览器
  • 芜湖网站开发茂名网站优化
  • 网站前台的功能模块做别人一样的网站模板
  • 北京公司公示在哪个网站深圳市建设工程造价管理站官网
  • 同时在线上万人的网站需要什么配置云服务器软件开发模型有哪些
  • 给公司做网站 图片倾权北京怀柔网站制作
  • 镇江网站建设一般多少钱未来做哪个网站能致富
  • 网站建设优惠券免费网站源码博客
  • 微商手机网站制作公司哪家好龙湖地产 网站建设
  • 怎么做签到网站成都建站哪家好
  • 网站如何推广引流店铺名称设计logo设计
  • wordpress模板云端青岛自动seo
  • 无锡专业网站推广wordpress设置收费下载
  • 网站首页效果图怎么设计网站备案期间 搜索引擎
  • 灰系网站榆林网站建设vs0912
  • 网站设计尺寸大小公司网站建设岗位
  • 一级域名和二级域名做两个网站自己怎么做视频网站
  • 媒体网站开发小型网站开发用什么语言
  • 兰州优化网站推广南磨房网站建设公司
  • 学习php做毕设网站方向wordpress无法创建文件
  • 网站建设专业名词电商商城平台定制
  • 商务网站建设与维护 ppt一键生成微信小程序