功能

memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

头文件

所在头文件 <string.h>或< cstring >

函数原型

  1. _CRTIMP int __cdecl __MINGW_NOTHROW memcmp (const void*, const void*, size_t) __MINGW_ATTRIB_PURE;

参数含义:

  • 第一个参数:目的地址
  • 第二个参数:源地址
  • 第三个参数:所需要复制的字节数

程序用例

  • 目的地址与原地址数据宽度相同的时候
  1. int main()
  2. {
  3. char a[] = "mmmm";
  4. char b[] = "";
  5. memcpy(b,a,);
  6. printf("%d\n\r",sizeof(b));
  7. printf("%s\n",b);
  8. for(int i = ; i < sizeof(b); i++)
  9. printf("b[%d]的字符串是%c\n\r",i,b[i]);
  10. return ;
  11. }

运行结果

可以看出memcpy函数只复制需要size_t个字节数据到目的地址,目的地址size_t之后的数据并不会改变

  • 目的地址的宽度比原地址不相等时
  1. int main()
  2. {
  3. char a[] = "abcdef";
  4. short b[] = {0x17,0x18,0x19,0x19};
  5.   //目的地址数据宽
  6. memcpy(b,a,);
  7. printf("b[0]的值是%c\n",b[]);
  8. printf("b[0]的值是%c\n",b[]>>);
  9. printf("b[1]的值是%x\n",b[]);
  10. printf("b[2]的值是%x\n",b[]);
  11. printf("b[3]的值是%x\n",b[]);
  12. return ;
  13. }

运行结果

可以看到原始数据先复制到低位,再复制到高位,感觉这个可能跟数据的存储大端小端有关系,在CCS上测试了也是这样的效果。

  • 目的地址的宽度比原地址的宽度小
  1. int main()
  2. {
  3.   //源地址数据宽
  4. short c[] = {0x1234,0x5678,0x2345,0x3390};
  5. char d[] = {};
  6. memcpy(d,c,);
  7. for(int i = ; i < sizeof(d); i++)
  8. printf("d[%d]的值是%x\n\r",i,d[i]);
  9. return ;
  10. }

运行结果

先复制的是低位,再复制的是高位。
-复制之后再还原

  1. int main()
  2. {
  3. char a[] = "abcdef";
  4. short b[] = {0x17,0x18,0x19,0x19};
  5. memcpy(b,a,);
  6. char d[] = {};
  7. memcpy(d,b,);
  8. for(int i = ; i < sizeof(d); i++)
  9. printf("d[%d]的值是%x\n\r",i,d[i]);
  10. return ;
  11. }

运行结果

C/C++ memcpy函数的用法的更多相关文章

  1. memcpy函数的用法以及实现一个memcpy函数

    memcpy的用法 在项目中经常用到memcpy来实现内存的拷贝工作,如下代码片段 memcpy( pData, m_pSaveData_C, iSize * sizeof( unsigned sho ...

  2. C语言memcpy函数的用法

    介绍 memcpy是memory copy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它.它的函原型如下: void *memcpy(void *dest, const void *sr ...

  3. memcpy函数用法

    memcpy函数用法 .分类: VC++ VC++ mfc matlab 2011-12-01 19:17 14538人阅读 评论(0) 收藏 举报 null 原型:extern void *memc ...

  4. C语言使用memcpy函数实现两个数间任意位置的复制操作

    c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. 用法:void *memcpy(void *dest ...

  5. 使用memcpy函数时要注意拷贝数据的长度

    memcpy函数简介 memcpy函数是C/C++语言中的一个用于内存复制的函数,声明在 string.h 中(C++是 cstring).其原型是: void *memcpy(void *desti ...

  6. 有关日期的函数操作用法总结,to_date(),trunc(),add_months();

    相关知识链接: Oracle trunc()函数的用法 oracle add_months函数 Oracle日期格式转换,tochar(),todate() №2:取得当前日期是一个星期中的第几天,注 ...

  7. Oracle to_date()函数的用法

    Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...

  8. js中bind、call、apply函数的用法

    最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站.但 ...

  9. Oracle trunc()函数的用法

    Oracle trunc()函数的用法 /**************日期********************/1.select trunc(sysdate) from dual --2013-0 ...

随机推荐

  1. cf 760B.Frodo and pillows

    二分,判断条件就是最小情况(设当前k位取x)比剩余值(m-x)要小.(貌似又做麻烦了2333) #include<bits/stdc++.h> #define LL long long # ...

  2. Java TCP发送与接收

    IP地址?端口号?主机名? 什么是Socket? 什么是UDP? 什么是TCP? UDP和TCP区别? 以上问题请自行百度,有标准解释,此处不再赘述,直接上干货! 实例: 发送端: public cl ...

  3. 浅谈ASCII 、ISO8859-1、GB2312、GBK、Unicode、UTF-8 的区别。

    浅谈ASCII .ISO8859-1.GB2312.GBK.Unicode.UTF-8 的区别. 首先,先科普一下什么是字符编码.字符是指一种语言中使用的基本实体,比如英文中的26个英文字母,标点符号 ...

  4. 干货|微软远程桌面服务蠕虫漏洞(CVE-2019-1182)分析

    2019年8月,微软发布了一套针对远程桌面服务的修复程序,其中包括两个关键的远程执行代码(RCE)漏洞,CVE-2019-1181和CVE-2019-1182.与之前修复的"BlueKeep ...

  5. linux常用命令之------文件操作、文件查看、权限、打包压缩

    1.一般公司把linux作为自己的应用服务器,将应用和服务器部署在上面 2.测试一般用来打包.压缩.查日志,写一个简单的shell 获得linux服务器的方式 a:网上租一台云服务器 b:安装vmwa ...

  6. Arduino Wireless Communication – NRF24L01 Tutorial(arduino无线通信---NRF24L01教程)

    arduino下nrf24l01库文件及相关说明 库的说明文档 https://tmrh20.github.io/RF24/ 库的源代码github下载页面 https://tmrh20.github ...

  7. CentOS 7 连接不到网络解决方法

    使用VM12创建虚拟机并安装CentOS 7,但是安装完成后发现连接不到网络. ping jd.com发现不通 因为在创建虚拟机的时候我们选择的是NAT模式 这里给出NAT模式下对应的的解决方法: 一 ...

  8. js冒泡,阻止冒泡

    js 冒泡事件 阻止冒泡 window.onload = function () { var oDiv1 = document.getElementById('div1'); var oDiv2 = ...

  9. tp5 输入域名即访问指定页面

    遇到PC官网类型的项目,经常会遇到隐藏入口文件和输入域名即可打开官网首页的需求.需要修改站点的默认加载文件和伪静态的配置才可以生效. 以下为nginx1.15版本,宝塔面板的修改方式.修改入口文件为w ...

  10. vue的选项卡功能

    选项卡:点击不同的按钮会显示不同的内容 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...