内存函数,memcpy,memmove,memcmp,memset_大小端

struct s
{
	char name[20];
	int age;
};

int main()
{
	int arr1[] = { 1,2,3,4,5 };
	int arr2[5] = { 0 };
	struct s arr3[] = { {"张三",20} ,{"李四",18} };
	struct s arr4[3];

	memcpy(arr4, arr3, sizeof(arr3));
	//memcpy(arr2, arr1, sizeof(arr1));

	return 0;
}

struct s
{
	char name[20];
	int age;
};


void* my_memcpy(void* dest, const void* src, size_t num)
{
	void* ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (num--)
	{
		*(char*)dest = *(char*)src;
		++(char*)dest;
		++(char*)src;

	}
	return ret;
}

int main()
{
	int arr1[] = { 1,2,3,4,5 };
	int arr2[5] = { 0 };
	struct s arr3[] = { {"张三",20} ,{"李四",18} };
	struct s arr4[3];

	my_memcpy(arr4, arr3, sizeof(arr3));
	//memcpy(arr2, arr1, sizeof(arr1));

	return 0;
}

内存函数,memcpy,memmove,memcmp,memset_整型_02

memcpy负责不重叠内容的拷贝,但是在vs编译器下,其可以完成有重叠内容的拷贝,一般来说负责含有重叠部分的拷贝函数为memmove。

内存函数,memcpy,memmove,memcmp,memset_#include_03

内存函数,memcpy,memmove,memcmp,memset_整型_04

内存函数,memcpy,memmove,memcmp,memset_#include_05

memmove的实现思路

内存函数,memcpy,memmove,memcmp,memset_#include_06

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

void* my_memmove(void* dest, const void* src, size_t count)
{
	assert(dest != NULL);
	assert(src != NULL);
	void* ret = dest;
	if (dest < src)
	{
		//前->后
		while (count--)
		{
			*(char*)dest = *(char*)src;
			++(char*)dest;
			++(char*)src;
		}
	}
	else
	{
		//后->前
		while (count--)
		{
			*((char*)dest + count) = *((char*)src + count);
		}
	}
	return ret;
}

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

	return 0;
}

实现思路2

内存函数,memcpy,memmove,memcmp,memset_#include_07

memcmp

内存函数,memcpy,memmove,memcmp,memset_整型_08

memset,是按字节来设置的,一个整型是四个字节,设置的时候要考虑和计算好。注意存储和设置方式,大小端。

内存函数,memcpy,memmove,memcmp,memset_大小端_09