首页 > 其他分享 >模拟实现【memmove】函数

模拟实现【memmove】函数

时间:2024-02-02 19:32:31浏览次数:25  
标签:sz arr 函数 memmove int void char 模拟

C 库函数 - memmove()

 cpulspuls官方描述—<string.h>

描述:

memmove 函数,和memcpy一样,可以将 num 个字节的值从源指向的位置直接复制到目标指向的内存块。

不过memcpy一般用来处理2个独立的内存空间

memmove通常用来处理2块重叠的内存空间

我们可以这样说:对于重叠的内存块,使用 memmove 函数是一种更安全的方法。

声明:

void * memmove ( void * destination, const void * source, size_t num );

代码实现:

#include <stdio.h>
#include <assert.h>

void* My_memmove(void* to, const void* from, size_t sz)
{
	assert(to && from);

	void* ret = to;

	if (to < from)//从前往后
	{
		while (sz--)
		{
			*(char*)to = *(char*)from;
			to = (char*)to + 1;
			from = (char*)from + 1;
		}
	}
	else//从后往前
	{
		while(sz--)//从最后位置-1开始copy
		{
			*((char*)to + sz) = *((char*)from + sz);
		}
	}
	return ret;
}

int main()
{
	int arr_1[] = {1,2,3,4,5,6,7,8,9,10};
	int i = 0;
	int sz = 0;
	sz = sizeof(arr_1) / sizeof(arr_1[0]);

	My_memmove(arr_1, arr_1+3, 20);

	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr_1[i]);
	}

	return 0;
}

运行结果:

模拟实现【memmove】函数_代码实现

标签:sz,arr,函数,memmove,int,void,char,模拟
From: https://blog.51cto.com/u_16509575/9561191

相关文章

  • 无涯教程-String.prototype.includes(searchString, position = 0)函数
    该方法确定字符串是否是给定字符串的子字符串。String.prototype.includes-语法str.includes(searchString[,position])searchString-要搜索的子字符串。position    -该字符串中开始搜索searchString的位置;默认为0。String.prototype.includes-返回值t......
  • Oracle之decode函数的使用
    decode是Oracle公司独家提供的功能,它是一个功能很强的函数。它虽然不是SQL的标准,但对于性能非常有用。decode函数的常用场景:1、使用decode判断字符串或数值decode(value,if1,then1,if2,then2,if3,then3,...,else)sql含义为:IF条件=值1THENRETURN(value1)ELSIF......
  • 无涯教程-String.prototype.startsWith(searchString, position = 0)函数
    该方法确定字符串是否以指定的字符开头。String.prototype.startsWith-语法str.startsWith(searchString[,position])searchString  - 在此字符串开头要搜索的字符。position     - 该字符串中开始搜索searchString的位置;默认为0。String.prototype.s......
  • 【pytest】Hook钩子函数完整API总结
    pytest的钩子函数有很多,通过钩子函数的学习可以了解到pytest在执行用例的每个阶段做什么事情,也方便后续对pytest二次开发学习。详细文档可以查看pytest官方文档https://docs.pytest.org/en/latest/reference.html#hooks钩子函数总结第一部分:setuptools引导挂钩要求足够早注......
  • 【pytest进阶】pytest之hook函数
    什么是hook函数比如说你写了一个框架类的程序,你希望这个框架可以“被其他的代码注入”,即别人可以加入代码对你这个框架进行定制化,该如何做比较好?一种很常见的方式就是约定一个规则,框架初始化时会收集满足这个规则的所有代码(文件),然后把这些代码加入到框架中来,在执行时一并执行......
  • 无涯教程-toString()函数
    此方法返回表示指定对象的字符串。toString()-语法string.toString()toString()-返回值返回表示指定对象的字符串。toString()-示例varstr="Applesareround,andApplesareJuicy.";console.log(str.toString());运行上面代码输出Applesareround,an......
  • 无涯教程-toLowerCase()函数
    此方法返回转换为小写的调用字符串值。toLowerCase()-语法string.toLowerCase()toLowerCase()-返回值返回转换为小写的调用字符串值。toLowerCase()-示例varstr="Applesareround,andApplesareJuicy.";console.log(str.toLowerCase())运行上面代码输......
  • 函数sigqueue
    一、函数sigqueuesigqueue函数原型:函数作用:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用intsigqueue(pid_tpid,intsigno,constunionsigvalvalue);分析:第一个参数:指定接收信号的进程id第二个参数:确定即将发送的信号第三个参......
  • Linux——信号处理函数sigaction()
    sigaction()作用:设置某信号的信号处理函数1.sigaction()函数原型#include<signal.h>intsigaction( intsigno, conststructsigaction*restrictact, structsigaction*restrictoldact );12345signo:指定的信号,可以为除SIGKILL及SIGSTOP外的任何信号act:信号处理方式......
  • 无涯教程-substring()函数
    此方法返回String对象的子集。substring()-语法string.substring(indexA,[indexB])indexA   - 小于字符串长度的0到1之间的整数。indexB   - (可选)0到字符串长度之间的整数。substring()-返回值substring方法根据给定的参数返回新的子字符......