memmove函数

本文详细介绍了memmove函数的使用方法及其实现原理。memmove能够处理源和目标区域重叠的情况,确保数据正确拷贝。文章通过示例代码展示了如何使用memmove进行字符串和数组元素的移动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

memmove用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。


原型:void *memmove( void* dest, const void* src, size_t count );
头文件<string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
相关函数:memset、memcpy

#include <string.h>
int main(void)
{
char s[]="Golden Global View";
memmove(s,s+7,strlen(s)+1-7);
printf("%s",s);
getchar();
return 0;
}
程序输出结果:Global View


memmove函数的实现

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void *my_memmove(void *dest, void *src, int n)
{
	char *pdest = (char *)dest;
	char *psrc = (char *)src;
	assert(dest);
	assert(src);
    if( pdest>=psrc && pdest<psrc+n-1)
	{
		while(n)
		{
			*(pdest+n-1) = *(psrc+n-1);
			n--;
		}
	}
	else
	{
		while(n)
		{
			*pdest++ = *psrc++;
			n--;

		}

	}
	return dest;
}
int main()
{
	float arr1[8] ={1.0f,2.0f,3.0f,4.0f,5.0f,6.0f,7.0f,8.0f};
	int i = 0;
	my_memmove(arr1+3,arr1+2,sizeof(float)*3);

	for(i=0; i<8; i++)
	{
		printf("%f ",arr1[i]);
	}
	printf("\n");
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值