1.模拟实现memcpy

//memcmp
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my_memcmp(const char* str1, const char* str2, int num)
{
assert(str1 != NULL &&str2 != NULL);
while (num--&&*str1==*str2)
{
str1++;
str2++;
}
if (num == 0)
return 0;
else
return *str1 - *str2;

}
int main()
{
char str1[] = "aabbccdd";
char str2[] = "aabbccdf";
int ret=my_memcmp(str1, str2, sizeof(str1));
printf("%d\n", ret);
system("pause");
return 0;
}


2.模拟实现memmove

memmove 
//从源目标字符串中,拷贝count个字符,如果出现内存重叠问题,就会从后向前进行拷贝
//如果没有,就会想memcopy一样进行拷贝

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

void *my_memmove(void *dest, void *str, size_t len)
{
assert(dest);
assert(str);
char *pdest = (char *)dest;
char *pstr = (char*)str;
if ((pstr < pdest) && (pdest < pstr + len)) //源和目标有重叠的情况,从后往前拷贝
{
while (len--)
{
*(pdest + len) = *(pstr + len);
}
}
else //没有重叠,从前往后拷贝
{
while (len--)
{
*pdest = *pstr;
pdest++;
pstr++;
}
}
return dest;
}

int main()
{
int i = 0;
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int size = sizeof(arr) / sizeof(arr[0]);
my_memmove(arr, arr + 3, 8); //注意这里的长度是以一字节为单位的
for (i = 0; i <size; i++)
{
printf("%d ", arr[i]);
}

system("pause");
return 0;
}



3.模拟实现memset

//memset
#include<stdio.h>
#include<assert.h>
void* my_memset(char * ptr, int value, size_t num)
{
assert(ptr);
for (int i = 0; i < num; i++)
{
ptr[i] = value;
}
}
int main()
{
char str[] = "almost every programmer should know memset!";
my_memset(str, '-', 6);
printf("%s\n", str);
system("pause");
return 0;
}