1:区别
memcpy可以拷贝任何数据类型的对象,指定拷贝的数据长度。
strcpy只能拷贝字符串了,它遇到'\0'就结束拷贝
2:性能
static inline char *__kernel_strcpy(char *dest, const char *src)

  1. {

  2. char*xdest = dest;

  3. asmvolatile("\n"

  4. "1: move.b  (%1)+,(%0)+\n"

  5. "   jne 1b"

  6. :"+a"(dest),"+a"(src)

  7. ::"memory");

  8. return xdest;

  9. }

  10. static __always_inline void*__memcpy(void*to,constvoid*from, size_t n)

  11. {

  12. int d0, d1, d2;

  13. asmvolatile("rep ; movsl\n\t"

  14. "movl %4,%%ecx\n\t"

  15. "andl $3,%%ecx\n\t"

  16. "jz 1f\n\t"

  17. "rep ; movsb\n\t"

  18. "1:"

  19. :"=&c"(d0),"=&D"(d1),"=&S"(d2)

  20. :"0"(n /4),"g"(n),"1"((long)to),"2"((long)from)

  21. :"memory");

  22. return to;

  23. }

memcpy()充分利用了机器字长为32位的特性(32位系统,一次内存读/写可操作4字节的数据, 对于64位系统,则一次可操作8字节数据)。先按4字节一组(movsl)拷贝,共复制n/4次;对剩下的零头再逐字节拷贝。如果支持,memcpy()还可以使用了MMX/SSE指令增加一次操作中的字节数,进一步提高效率。
3:健壮性
拷贝的缓冲区如果是非字符串,尽量用memcpy(),其实字符串使用memcpy也是很好的选择。你说的溢出可能是使用strcpy的\0结束问题或者是用memcpy指定的拷贝长度不对造成的。

参考http://www.dewen.org/q/1469

转载于:https://blog.51cto.com/mumufairy/1213378

c++ memcpy与strcpy的比较相关推荐

  1. memcpy和strcpy的区别 ?

    memcpy和strcpy的区别 strcpy和memcpy主要有以下3方面的区别 复制的内容不同 用途不同 从s1复制字符串到s2strncpy和memcpy很相似,只不过它在一个终止的空字符处停止 ...

  2. C语言 memcpy 和 strcpy 函数区别 - C语言零基础入门教程

    目录 一.memcpy 函数/strcpy 函数简介 二.memcpy 函数/strcpy 函数实战 1.strcpy 函数属于字符串拷贝 2.memcpy 函数属于内存拷贝 三.猜你喜欢 零基础 C ...

  3. 拷贝函数memcpy和strcpy的用法及区别

    memcpy和strcpy的区别 memecpy拷贝,是内存之间的拷贝.strcpy是字符串的拷贝 memcpy按位拷贝 int main() {int ar[10] = { 12, 23, 34, ...

  4. c语言memcpy与strcpy,C语言:strcpy()和memcpy()

    一.strcpy和memcpy都是标准C库函数,它们有下面的特点: 1.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知st ...

  5. [收集] C++ memset ,memcpy 和strcpy 的区别

    Memset  用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为' '或'\0': 例:char a[100];memset(a, '\0', sizeof(a)); mems ...

  6. memset、memcpy、strcpy、HeapAlloc

    win7, vc6:新建一个单文档工程:代码: void CMemView::OnDraw(CDC* pDC) {CMemDoc* pDoc = GetDocument();ASSERT_VALID( ...

  7. memcpy和strcpy的区别及memcmp和strcmp的区别

    strcpy与memcpy的区别: strcpy的原型:char *strcpy(char *dest, const char *src) strcpy是拷贝字符串.①不指定长度②以\0为标志结束(即 ...

  8. memcpy和strcpy函数

    strcpy strcpy 是字符串拷贝函数,那什么是字符串呢,最后一个字符为零意思是字符串结束,哪怕后面有再多字节也没有用,比如 char buffer[256]; char *pos = & ...

  9. memcpy与strcpy的实现与区别

    原型:extern   void   *memcpy(void   *dest,   void   *src,   unsigned   int   count);      功能:由src所指内存区 ...

最新文章

  1. 归一化互相关Normalization cross correlation (NCC)
  2. Win10网页打不开提示DNS_PROBE_POSSIBLE错误解决
  3. 分析一个软件要考虑的问题
  4. 科大星云诗社动态20210512
  5. window.open 实现session隔离_InnoDB存储引擎MVCC实现原理
  6. Mybatis 动态Sql语句《常用》
  7. 巨型机是一种什么的超级计算机,这个世界其实是一个超级计算机
  8. 工控交换机和工业级交换机是怎么区别的,具体有哪些区别?分别应用在什么领域?
  9. Android activity启动模式
  10. 萤石网络摄像头服务器稳定吗,萤石摄像头画面稳定性如何?
  11. HTML5 —— 本地存储
  12. vue 花括号里面的变量_二、Vue条件指令
  13. uniapp底部导航栏中间凸起_PPT导航栏,真的非常好用!
  14. 孪生网络(1)_孪生网络的分类
  15. win7计算机无法远程桌面连接,解决win7无法被远程桌面连接教程
  16. 1.3经济金融基础之金融市场
  17. Spacy 常见词性标注
  18. thinkphp3.2.3 支付宝授权登录php
  19. OK6410上裸机点亮LED程序
  20. 如何选择适合你的兴趣爱好(一),拉丁舞

热门文章

  1. hive中任意相邻时间段数据获取
  2. Windows 10下,如何使用PowerShell批量重启局域网电脑
  3. linux下mariadb大小写敏感
  4. 关于是否在C#中加入不可空引用类型的争论
  5. iOS UI基础-7.0 UIScrollView
  6. 点对点 客户端-服务器 聊天程序
  7. b样条曲面绘制 opengl_CAD制图软件中如何利用EXCEL输入坐标绘制曲线?
  8. python input 文件名_Python播放音频与录音
  9. MySql的连接查询
  10. Django用户注册、登录、注销(一)