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

已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
void *memcpy( void *dest, const void *src, size_tcount);

char * strcpy(char * dest, const char * src) // 实现src到dest的复制
{if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性{return NULL;}char *strdest = dest;        //保存目标字符串的首地址while ((*strDest++ = *strSrc++)!='\0'); //把src字符串的内容复制到dest下return strdest;
}
void *memcpy(void *memTo, const void *memFrom, size_t size)
{if((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必须有效return NULL;char *tempFrom = (char *)memFrom;             //保存memFrom首地址char *tempTo = (char *)memTo;                  //保存memTo首地址      while(size -- > 0)                //循环size次,复制memFrom的值到memTo中*tempTo++ = *tempFrom++ ;  return memTo;
}

strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

相关函数: bcopy(), memccpy(), memmove(), strcpy(), strncpy()
表头文件: #include <string.h>
定义函数: void *memcpy(void *dest, const void *src, size_t n)
函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束
返回值:   返回指向dest的指针
附加说明: 指针src和dest所指的内存区域不可重叠

-------------------------------------------------------
#include <string.h>
#include <stdio.h>

int main()
{
    char a[30] = "string (a)";
    char b[30] = "hi\0zengxiaolong";
    int i;

strcpy(a, b);             //a[30] = "hi\0ing (a)"
    printf("strcpy():");
    for(i = 0; i < 30; i++)
        printf("%c", a[i]);   //hi ing (a)

memcpy(a, b, 30);         //a[30] = "hi\0zengxiaolong"
    printf("\nmemcpy():");
    for(i = 0; i < 30; i++)
        printf("%c", a[i]);   //hi zengxiaolong
    printf("\n i = %d\n", i); //30

}
----------------------------------------

memcpy和memmove区别

memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。

但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开销。

memcpy实现

void* memcpy(void* dest, const void* src, size_t n)
{char*      d = (char*) dest;const char*  s = (const char*) src;while(n-–) *d++ = *s++;return dest;
}

memmove实现

void* memmove(void* dest, const void* src, size_t n)
{char*     d  = (char*) dest;const char*  s = (const char*) src;if (s>d) {// start at beginning of swhile (n--)*d++ = *s++;}else if (s<d){// start at end of sd = d+n-1;s = s+n-1;while (n--)*d-- = *s--;}return dest;
}

strcpy,memcpy和memmove区别相关推荐

  1. 【C/C++】C语言复制字符串及复制函数汇总(strcpy()/memcpy()/strncpy()/memmove())

    目录: strcpy() 举例: memcpy() 举例: strncpy() 举例: memmove() 举例: 我们首先来考虑一个简单的问题,我们定义了一个字符串,然后想要复制这个字符串,在C语言 ...

  2. 细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数

    一.函数介绍: 1.memcpy 函数原型:extern void *memcpy(void *dest, const void *src, size_t count); 用法:#include< ...

  3. C语言 -- string.h中函数功能详解与手动实现 - 02(常用函数memcpy、memmove、strcpy、strdup、strcat、strtok...)

    内容预览 3.5.搬迁类型 --- 函数功能详细说明 :将内存空间中内容移动.复制到另一内存空间 3.6.搬迁类型 --- 函数功能测试与手动实现 3.6.1.memcpy.memccpy 3.6.2 ...

  4. strcpy和memcpy的区别 | strcpy和strncpy的区别

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

  5. memcpy和memmove的区别以及内存重叠问题

    memcpy和memmove的区别以及内存重叠问题 转自:https://www.codecomeon.com/posts/89/ 区别 memcpy() 和 memmove() 都是C语言中的库函数 ...

  6. 《strcmp,strcpy,memcpy,memmove等函数模拟实现》

    模拟实现常见字符串函数比如:strcmp,strcpy,memcpy,memmove等函数 1.模拟实现memcpy函数 2.模拟实现memmove函数 3.模拟实现strstr函数 4.模拟实现st ...

  7. 如何用C语言实现各种字符函数和字符串函数strstr、memcpy、memmove、strlen、strcpy、strcmp、strcat

    用C语言模拟实现字符函数与字符串函数 strstr.memcpy.memmove.strlen.strcpy.strcmp.strcat 若使用本文相关代码,还请动手点个赞!!! #define _C ...

  8. 关于memcpy和memmove两函数的区别

    http://blog.csdn.net/caowei840701/article/details/8491836 [cpp] view plain copy <p> 关于memcpy和m ...

  9. memcpy和memmove函数的区别

    文章目录 前言 memcpy函数 memmove函数 memcmp函数 前言 c语言<string.h>库里面有很多的字符函数,比如memcpy,memmove,memcmp等,这些函数是 ...

最新文章

  1. Oracle查看并修改最大连接数
  2. Gallery 3D+倒影 滑动切换图片示例(转)
  3. 团体程序设计天梯赛-练习集L1-023. 输出GPLT
  4. 2021-06-13读写锁=独占锁与共享锁
  5. 2017年编程语言排名
  6. Matlab2017a汉化版软件详细安装教程
  7. java db4o 教程_面向Java开发人员db4o指南:数组和集合 (1)
  8. 轨道客流预测TransCAD公交分配结果详解
  9. 如何演示扇形面积公式推导过程
  10. 中级程序员还应该如何提高自己
  11. 折线图播放器组件 - elementui - ehcart
  12. 苹果手机有4g信号但是微信未连接服务器,苹果5s有显示4g网络但无上微信 是不是那里设置了 今天才出现的...
  13. 【用例设计】接口用例设计
  14. php GD库做水印功能,合并图片
  15. 好用的需求文档管理工具Telelogic DOORS
  16. AI开发过程中常用开发命令及软件安装
  17. top SRM526.5
  18. 团队做项目该怎样分工
  19. 计算机无法连接iphone,iTunes不识别iPhone?iTunes无法连接iPhone怎么办
  20. Visio View:打开VSd时,IE弹出已停止工作。

热门文章

  1. MySQL面试题 | 附答案解析(二十)
  2. 2020年全球十大突破性技术公布:数字货币等在列
  3. Spatial As Deep: Spatial CNN for Traffic Scene Understanding论文翻译
  4. linux mud 游戏,快刀幻想mud文字传奇-快刀幻想mud神器兑换码-快刀幻想mud下载v1.80-Linux公社...
  5. PCL深度图像(2)
  6. 【疑难杂症】vue npm run build的时候遇到Module build failed: Error: No ESLint configuration found.报错提示咋办呀?
  7. 在Ubuntu 16.04.6 LTS升级python 3.5.x到3.7.3之后导致gnome-ternimal无法打开的解决办法
  8. 在Ubuntu 14.04 64bit上安装下载管理器FlareGet 4.2.92
  9. 趣谈HTTP协议中的那些MIME header
  10. 虚幻引擎的数学知识学习教程 Math for Unreal Engine (Early Preview)