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

news/2024/11/9 5:05:32 标签: 算法, 开发语言, c语言

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;
}


http://www.niftyadmin.cn/n/5744849.html

相关文章

C 语言学习-03【输入与输出】

1、复合赋值语句 赋值语句&#xff1a; #include <stdio.h>int main() {int i 1, j 5, m 4, n 3;j i;m % n;n n - n * n;printf("j %d m %d n %d\n", j, m, n);char a A, b, c;c b a 1;printf("a %c b %c c %c", a, b, c);return 0;…

纯血鸿蒙系统 HarmonyOS NEXT自动化测试实践

1、测试框架选择 hdc&#xff1a;类似 android 系统的 adb 命令&#xff0c;提供设备信息查询&#xff0c;包管理&#xff0c;调试相关的命令ohos.UiTest&#xff1a;鸿蒙 sdk 的一部分&#xff0c;类似 android sdk 里的uiautomator&#xff0c;基于 Accessibility 服务&…

C++builder中的人工智能(10)神经网络中的Sigmoid函数

在这篇文章中&#xff0c;我们将探讨最受欢迎的激活函数之一——Sigmoid函数。我们将解释什么是Logistic函数&#xff0c;以及它与Sigmoid函数的区别&#xff0c;并展示如何在C应用中使用这些函数。 目录 人工神经网络&#xff08;ANN&#xff09;中的激活函数是什么&#xff…

SCRM开发新趋势打造高效客户关系管理系统

内容概要 在当今数字化的浪潮中&#xff0c;客户关系管理&#xff08;SCRM&#xff09;系统的开发正迎来了突破性的新趋势。传统的客户管理方式已经无法满足现代企业对灵活性与高效性的需求&#xff0c;我们必须顺应时代的发展&#xff0c;采用更为智能化的解决方案。SCRM开发…

【excel基本操作-sumif绝对引用和相对引用

低量级数据的存储 复杂且无法优化的数据报表 怎么学excel? 一、输入与输出 二、计算与处理 三、可视化 四、连接匹配与自动化 excel操作笔记 打开表格第一步筛选 所以筛选的快捷键&#xff1a;shiftctrll 排序&#xff1a;多列排序 开始-排序与筛选-自定义排序-设置关键字添…

神奇的-ther,原来如此神奇

英语中有很多单词&#xff0c;是以-ther结尾的&#xff0c;对于这个-ther&#xff0c;我相信等读完了英语专业的研究生&#xff0c;很多人也还是不知道这是个什么东西&#xff0c;比如&#xff1a; father父亲mother母亲weather天气 其实这个东西&#xff0c;是一个结构。要理…

使用最新版的wvp和ZLMediaKit搭建Gb28181测试服务器

文章目录 说明安装1.安装nodejs简介安装步骤 2.安装java环境3.安装mysql安装修改密码 4.安装redis5.安装编译器6.安装cmake7.安装依赖库8.编译ZLMediaKit9.编译wvp-GB28181-pro 配置1.ZLMediaKit配置2.wvp-GB28181-pro配置2.1.配置ZLMediaKit连接信息2.2.28181服务器的配置2.3.…

【笔记】变压器-热损耗-频响曲线推导 - 04 额定功率处损耗特性

0.最大的问题 - 散热 对变压器这类功率器件&#xff0c;最大的问题是散热的效率。因为传统的电路基板热导率并不高&#xff0c;几乎和良性导热材料有近乎两个数量级的导热差异&#xff0c;所以&#xff0c;会采用特殊的导热技术&#xff0c;把热量尽可能快地传导到散热片。 传…