欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【c语言】memmove函数的使用和模拟实现

【c语言】memmove函数的使用和模拟实现

2025/2/8 23:36:36 来源:https://blog.csdn.net/2303_77060768/article/details/143627666  浏览:    关键词:【c语言】memmove函数的使用和模拟实现

1.memmove函数的使用

memmove函数是 C 标准库中的一个内存处理函数,定义在 <string.h> 头文件中。与 memcpy 类似,它用于将一块内存区域的内容复制到另一块内存区域。不同的是,memmove 可以安全地处理源和目标内存区域重叠的情况,而 memcpy 在重叠情况下可能会产生未定义行为。

void * memmove ( void * destination, const void * source, size_t num );
  • destination:目标内存区域的起始地址。
  • source:源内存区域的起始地址。
  • num:要复制的字节数。
  • 返回目标内存区域 destination 的起始地址。

 实例:

#include <stdio.h>
#include <string.h>
int main ()
{
char str[] = "memmove can be very useful......";
memmove (str+20,str+15,11);
puts (str);
return 0;
}

运行结果: 

2.memmove函数的模拟实现

#include <stdio.h>
#include <string.h>
void* my_memmove(void* dst, const void* src, size_t count)
{void* ret = dst;
//如果目标地址在源地址之前,或者它们不重叠,则从前向后复制字节。if (dst <= src || (char*)dst >= ((char*)src + count)) {while (count--) {*(char*)dst = *(char*)src; //将void*类型的dest和src转换为char*类型,以便逐字节操作dst = (char*)dst + 1;src = (char*)src + 1;}}
//如果目标地址在源地址之后,并且它们重叠,则从后向前复制字节,以避免覆盖尚未复制的数据。else {dst = (char*)dst + count - 1;src = (char*)src + count - 1;while (count--) {*(char*)dst = *(char*)src;dst = (char*)dst - 1;src = (char*)src - 1;}}return(ret);
}
int main()
{char str[] = "memmove can be very useful......";my_memmove(str + 20, str + 15, 11);puts(str);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com