`
kenby
  • 浏览: 716809 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

memcopy 和 memmove 的实现

    博客分类:
  • c
阅读更多

一 memcopy 的实现

 

memcopy 不考虑源内存和目标内存之间的重叠, 逐字节地拷贝, 代码比较简单

 

 

void my_memcopy(void *src, void *dst, int size)
{
	char *psrc, *pdst;

	psrc = (char *)src;
	pdst = (char *)dst;

	while (size--) {
		*pdst++ = *psrc++;
	}
}

 

二 memmove 的实现

memmove 要考虑源内存和目标内存之间的重叠, 概括起来, 有 3 种情况:

(1) src 和 dst 没有重叠, 其充要条件是 |src - dst| >= size, 如下图所示:

 

(2) src 和 dst 有重叠, 而且 dst < src, 其充要条件是 dst < src && (src - dst) < size 如下图所示:

(3) src 和 dst 有重叠, 而且 src< dst, 其充要条件是 src < dst && (dst - src) < size 如下图所示:

对于第 (1) 和第 (2) 中情况, 可以这样移动数据: 从 src 开始, 由低地址向高地址逐字节拷贝.

对于第 (3) 中情况, 则必须这样移动数据: 从最后一个字节 (src + size -1) 开始, 由高地址向低地址逐字节拷贝.

 

代码如下:

 

 

void my_memmove(void *src, void *dst, int size)
{
	char *psrc, *pdst;

	psrc = (char *)src;
	pdst = (char *)dst;

	if (pdst < psrc || (pdst - psrc) > size) {
		while (size--) {
			*pdst++ = *psrc++;
		}
	} else {
		psrc = psrc + size - 1;
		pdst = pdst + size - 1;
		while (size--) {
			*pdst-- = *psrc--;
		}
	}
}
 

 

  • 大小: 1.8 KB
  • 大小: 1.8 KB
  • 大小: 1.1 KB
  • 大小: 1.1 KB
分享到:
评论

相关推荐

    C++中memcpy和memmove的区别总结

    那么既然memcpy和memmove二者都是内存拷贝,那二者究竟有什么区别呢? 先说memcpy 你有没有好好的参加过一场C++笔试。让你写出memcpy的实现,这是多么常见的笔试题啊。现在,拿起你的演算纸和笔;是的,是笔和纸,...

    常用函数的实现strcpy,memcpy,memmove,strcat,strcmp原型

    常用函数的实现strcpy,memcpy,memmove,strcat,strcmp原型

    关于memcpy和memmove的一点重要说明

    今天看到书上降到memcpy和memmove的区别才突然发现原来两者之间有如此区别,以前只知道这两个函数是 实现同样的功能,没有接触到其不同。 memcpy和memmove在MSDN的定义如下: 从两者的声明来看的确没有区别,我们来...

    memcpy及memmove.pdf

    。。。

    不调用C库函数实现memmove-memcpy函数功能

    不调用C库函数实现memmove-memcpy函数功能。

    C语言面试总结

    1.11 memcpy和memmove函数的实现 1.12 strcat函数实现 1.13 使用库函数atoi,将char *→int 1.14 使用库函数itoa,将int→char * 1.15 不使用库函数,将int→char * 1.16 不使用库函数,将char *→int 1.17 求两个...

    memmove、memcpy和memccpy简介.docx

    。。。

    深入理解memmove()与memcpy()的区别以及实现方法

    本篇文章是对memmove()与memcpy()的区别以及实现方法进行了详细的分析介绍,需要的朋友参考下

    copyarr_copyarry_

    数组拷贝,不使用memcpy和memmove,有很多坑,避免内存溢出

    C语言字符串各函数-具体实现

    strcpy,strncpy,strcat,strncat,strcmp,strncmp,strchr,strnchr,strlen,strnlen,strspn,strpbrk,strtok,strsep,memset,bcopy,memcpy,memmove,memcmp,memscan,strstr,memchr.函数具体实现内容。对理解C语言和C编程有...

    常见面试需要实现的函数std_func.c

    * 常见的字符串函数实现: * strlen * strcpy strncpy * strcmp strncmp * strcat strncat * strstr * * 内存操作: * memset、memcmp、memcpy、memmove * * 字符串和数组转换: * atoi itoa *

    C语言函数库函数详细介绍手册

    memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...

    C 语言库函数使用手册

    memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...

    C语言库函数速查 CHM

    memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...

    C语言函数速查手册

    memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...

    C语言函数速查

    memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...

    color:C ++库多数民众赞成在实现类的颜色。 可用型号

    使用memcpy , memmove复制颜色的数组/向量并使用memset进行初始化的能力。 与不同模型(及其格式)之间的转换。 仅标题 包含一个文件即可开始玩耍 通过使用del或rm ,只能还原为其中两个。 没有第三方 没有额外...

Global site tag (gtag.js) - Google Analytics