memcpy函数

原创 2013年12月05日 14:03:58

void *memcpy(void *dest, const void *src, size_t n);

从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
C语言中使用#include <string.h>;
C++中使用#include <cstring>和#include <string.h>都可以。前者只是为了凸显C++风格。
函数返回指向dest的指针。
1.source和destin所指的内存区域可以重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前被覆盖。而使用memmove可以用来处理重叠区域。函数返回指向destin的指针
2.strcpy和memcpy主要有以下3方面的区别。
2.1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体等。
2.2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
2.3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
3.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。
注意:source和destin都不一定是数组,任意的可读写的空间均可。
// memcpy.c
#include <stdio.h>
#include <string.h>
int main()
{
char *s="Golden Global View";
char d[20];
clrscr();
memcpy(d,s,( strlen(s)+1) );
printf("%s",d);
getchar();
return 0;
}
输出结果:Golden Global View
example2
作用:将s中第14个字符开始的4个连续字符复制到d中。(从0开始) 
#include <string.h>
int main(
{
char *s="Golden Global View";
char d[20];
memcpy(d,s+14,4); //从第14个字符(V)开始复制,连续复制4个字符(View) //memcpy(d,s+14*sizeof(char),4*sizeof(char));也可
d[4]='\0';
printf("%s",d);
getchar();
return 0;
}
输出结果: View
example3
作用:复制后覆盖原有部分数据
#include <stdio.h>
#include <string.h>
int main(void)
{
char src[] = "******************************";
char dest[] = "abcdefghijlkmnopqrstuvwxyz0123as6";
printf("destination before memcpy: %s\n", dest);
memcpy(dest, src, strlen(src));
printf("destination after memcpy: %s\n", dest);
return 0;
}
输出结果:
destination before memcpy:abcdefghijlkmnopqrstuvwxyz0123as6
destination after memcpy: ******************************as6

 

memcpy函数详解

函数原型:void *memcpy(void*dest, const void *src, size_t n); 用法:#include 功能:从源src所指的内存地址的起始位置开始,拷贝n个字节的数...
  • xiaominkong123
  • xiaominkong123
  • 2016年06月22日 14:17
  • 10828

memcpy源码

一直以来知道memcpy函数有问题,没有处理内存重叠的情况;而memmove函数对这种情况进行了处理。今天碰巧有同事问到,特地翻了一下源码,了解一下实现方法,大体如下: void *memcpy...
  • lxgwm2008
  • lxgwm2008
  • 2013年09月23日 22:05
  • 7388

memcpy函数的使用遇到的问题

问题描述:在32位的嵌入式板子上,调用标准库中的memcpy函数,从数组的第三个字节将数组内容拷贝到另外个内存中,代码运行到该函数时会挂掉 原因:调用的memcpy函数是按照32位对齐来处理的,从2...
  • chyMX
  • chyMX
  • 2016年07月23日 15:18
  • 280

自定义内存复制函数memcpy()

memcpy是C语言中的内存复制函数,它的目的是将src指向地址为起始地址的连续n个字节的数据复制到以dest所指向地址为其实地址的空间内,函数返回指向destin的指针。需要注意的是src与dest...
  • nawuyao
  • nawuyao
  • 2015年12月14日 11:46
  • 1509

自定义内存复制函数memcpy()

题目:编写memcpy 函数 代码: [cpp] view plain copy void* Memcpy(void* dst,const v...
  • zzuchengming
  • zzuchengming
  • 2016年07月03日 16:56
  • 1125

内存拷贝函数memcpy函数深入剖析

memcpy(拷贝内存内容)   定义函数:void * memcpy( void * dest, const void *src, size_t n ); memcpy()用来拷贝src所指的内存内...
  • u014744118
  • u014744118
  • 2016年09月25日 00:31
  • 3869

c语言中的memcpy实现

本文通过汇总一些网上搜集到的资料,总结c语言中的memcpy实现 背景 想必大多数人在面试时被要求写 memcpy的实现,很不幸,我也吃过这个亏(这种题要是写的一塌糊涂后面完全没戏),所以还是得提前准...
  • goodwillyang
  • goodwillyang
  • 2015年05月07日 13:39
  • 12303

memcpy的用法简介

1、memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域);拷贝多少个?有一个size变量控制 拷贝的字节数; 函数原型:void *memcpy...
  • u013152059
  • u013152059
  • 2016年11月01日 10:27
  • 536

memcpy内存复制代码的安全版本

C代码关于memcpy复制内存函数的安全版本#include #include #include void *Memcpy(void *dst, const void *src, size_t s...
  • JQ_AK47
  • JQ_AK47
  • 2016年10月15日 23:19
  • 1514

memcpy 原型

函数原型   void *memcpy(void *dest, const void *src, size_t n); 编辑本段功能   从源src所指的内存地址的起始位置开始拷贝n...
  • jinhongdu
  • jinhongdu
  • 2012年10月10日 09:22
  • 2035
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:memcpy函数
举报原因:
原因补充:

(最多只允许输入30个字)