当前位置:首页 » 《随便一记》 » 正文

类字符串函数---内存函数的使用以及模拟实现(下)_执久呀的博客

8 人参与  2021年11月10日 17:23  分类 : 《随便一记》  评论

点击全文阅读


 目录

一、前言

二、 memmove和memcmp函数

1.memmove函数(内存移动)

函数的使用:

memmove函数的模拟实现

2、memcmp函数(内存比较)

函数的使用:


一、前言

     前面我们已经讲了memcpymemset函数的使用,相信小伙伴们对这两个函数已经

非常熟悉了,(如果还不是很熟悉,可以看看上篇)那么我们现在要学习另外两个函数

memmovememcmp


本章内容memmove和memcmp函数

二、 memmove和memcmp函数

1.memmove函数(内存移动)

函数参数形式:void*memmove(void*destination,const void*source,size_t num);

其中num是无符号的整数,单位是字节。memcpy函数不能实现重复部分的拷贝,

如在同一个数组中无法实现,但是memmove可以实现重复内存拷贝。也可以说

memcpy是memmove的子集。

函数的使用

#include<stdio.h>

#include<string.h>

int main()
{
	int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
     
	memmove(arr1,arr1+2,20);

	for (int i = 0; i < 10; i++)
	{

		printf("%d ", arr1[i]);//34567678910

	}

	return 0;
}

memmove函数的模拟实现

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

void*my_memmove(void*dest, const void*src, size_t num)
 {
	assert(dest&&src);
	void*ret = dest;
	
	if (dest < src)
	{
		while (num--)
		{
			*(char*)dest = *(char*)src;
			++(char*)dest;
			++(char*)src;

		}
	}
	else
	{
		while (num--)
			{
				*((char*)dest + num) = *((char*)src + num);
				--(char*)dest;
				--(char*)src;
			}

	}

	return ret;

 }

int main()
{
	int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

	my_memmove(arr1, arr1+2, 5 * sizeof(int));
	for (int i = 0; i < 10; i++)
	{

		printf("%d", *(arr1 + i));//34567678910

	}
	return 0;
}


2、memcmp函数(内存比较)

  memcpy函数参数形式int memcmp(const void *str1,const void* str2,size_t num);

这个函数的返回类型是int ,nu单位是字节(一个int 4字节),str1大于str2返回一个

大于0的数,str1小于str2则返回一个小于0的数,等于则返回0。


#include<stdio.h>

#include<string.h>

int main()
{
	int arr1[10] = { 1, 2, 3, 4, 5, 6, 7 };

	int arr2[10] = { 1, 2, 3, 4, 5, 8, 9 };

	int kc = memcmp(arr1, arr2, 20);

	printf("%d", kc);

	return 0;
}

注意:本电脑是小端存储模式(以后会讲),简单的说就是高位存高地址,大端则相反如1为

00000001,小端模式下为01000000。

简单的说一下:如图


 所以说在整形数组比较非一个整数的字节大小端就有区别了

在小端中:

#include<stdio.h>

#include<string.h>

int main()
{
	int arr1[10] = { 1, 2, 3, 4, 5, 6, 7 };

	int arr2[10] = { 1, 2, 3, 4, 5, 8, 9 };

	int kc = memcmp(arr1, arr2, 21);

	printf("%d", kc);

	return 0;
}

 结果是一个小于0的数,vs编辑器默认是-1,原因在于前面20个字节相同,但是第21个字节,

如图:

 所以arr1小于arr2,返回小于0的数,如果是大端就不一样了,这里就不说那么多了,下次会涉及。

这期结束了,兄弟们一键三连


点击全文阅读


本文链接:http://zhangshiyu.com/post/30742.html

函数  字节  小于  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1