字符函数和字符串函数3 (memmove函数、memcmp函数、memset函数)

memmove函数

memmove函数的实现

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

#include<string.h>
#include<stdio.h>
void* my_memmove(void* dest,const void* src,int count)
{
	void* ret=dest;
	if(dest<src ||(char*)dest>(char*)src+count)
	{
		while(count--)
		{
			*(char*)dest=*(char*)src;
			++(char*)dest;
			++(char*)src;
		}
	}
	else
	{
		while(count--)
		{
			*((char*)dest+count)=*((char*)src+count);
		}//第一种方法
	}
	/*if(dest<src)
	{
		while(count--)
		{
			*(char*)dest=*(char*)src;
			++(char*)dest;
			++(char*)src;
		}
	}
	else if(dest>src)
	{
		while(count--)
		{
			*((char*)dest+count)=*((char*)src+count);
		}
	}*/
	//第二种方法
		return ret;
}
int main()
{
	int arr[]={1,2,3,4,5,6,7,8,9,10};
	int i=0;
	memmove(arr+2,arr,20);
	for(i=0;i<10;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}//编译结果1 2 1 2 3 4 5 8 9 10

注意事项

1、和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。但在vs编译器中,memcpy和memmove这两个函数的实现功能是相同的
2、如果源空间和目标空间出现重叠,就得使用memmove函数处理。

memcmp函数

#include<stdio.h>
#include<string.h>
int main()
{
	int arr1[]={1,2,3,4,5,6};
	int arr2[]={1,2,4,5,6};
	int ret=memcmp(arr1,arr2,9);
	printf("%d\n",ret);
	return 0;
}
//编译结果:-1

注意事项

arr1<arr2:返回负数

arr1>arr2:返回正数

arr1=arr2:返回0

menset函数

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[10]={0};
	int i;
	memset(arr,'#',10);
	for(i=0;i<10;i++)
	{
		printf("%c ",arr[i]);
	}
	return 0;
}

编译结果:# # # # # # # # # # 请按任意键继续. . .

注意事项

#include<stdio.h>
#include<string.h>
int main()
{
	int arr[10]={0};
	int i;
	memset(arr,'1',10);
	for(i=0;i<10;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

编译结果:16843009 16843009 257 0 0 0 0 0 0 0 请按任意键继续. . .

memsert(arr,1,10)
其中10是字节数
00 00 00 00 00 00 00 00 00 00 00 00 00 00 前三个字节
经过memsert函数之后,变成
01 01 01 01 01 01 01 01 01 01 00 00 即为
16843009 16843009 257 0 0 0 0 0 0 0 请按任意键继续. . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值