目录
一.memcpy函数
打开c.plusplus.com看一下关于这个函数的基本使用方法
使用方法:
这个函数不仅仅可以拷贝整数,还可以是其他的类型呀~
一起来看看
接下来一起来模拟实现一下这个函数:
函数参数原型:
源码:
#include<stdio.h>
#include<string.h>
#include<assert.h>
struct S
{
char name[20];
int age;
};
void* my_memcpy(void* dest, void* src, size_t num)
{
void* ret = dest;
assert(dest && src);
while (num--)
{
*((char *)dest) = *((char *)src);
dest = (char *)dest + 1;
src = (char *)src + 1;
}
return ret;
}
int main()
{
/*int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int arr2[10] = { 0};
memcpy(arr2, arr1, sizeof(arr1));*/
struct S arr3[] = { { "七七", 20 }, { "康康", 19 } };
struct S arr4[3] = { 0 };
my_memcpy(arr4, arr3, sizeof(arr3));
return 0;
}
二.memmove函数
memmove函数可以理解为memcpy函数的升级版 ,我举个例子来说明memmove函数。
源代码实现:
#include<stdio.h>
#include<string.h>
#include<assert.h>
void* my_memmove(void* dest, void* src, size_t num)
{
void *ret = dest;
assert(dest && src);
if (dest < src)
{
while (num--)
{
* (char*)dest = * (char *)src;
dest = (char *)dest + 1;
src = (char *)src + 1;
}
}
else
{
while (num--)
{
*((char *)dest + num) = *((char *)src + num);
}
}
return ret;
}
int main()
{
int arr4[20] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
my_memmove(arr4+2, arr4 , 20);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr4[i]);
}
return 0;
}
三.memcmp函数
先来看一下关于这个函数的介绍:
上代码感受一下这个函数
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{
int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int arr2[] = { 1, 2, 3, 5, 5, 6, 7, 8, 9, 10 };
int ret1 = memcmp(arr1, arr2, 12);
int ret2 = memcmp(arr1, arr2, 16);
printf("%d %d\n", ret1 , ret2);
}