模拟实现memcpy
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
void* my_memcpy(void* dest, void* src, size_t num)
{
assert(dest);
assert(src);
char* _d = (char*)dest;
char* _s = (char*)src;
while (num--)
{
*_d++ = *_s++;
}
return (void*)dest;
}
int main()
{
int arr1[] = {1, 2, 3, 4, 5};
int arr2[5];
char s1[] = "abcdef";
char s2[10];
my_memcpy(arr2, arr1, sizeof(arr1));
my_memcpy(s2, s1, sizeof(s1));
system("pause");
return 0;
}
模拟实现memmove
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
void* my_memmove(void* dest, void* src, size_t count)
{
assert(dest);
assert(src);
char* des = (char*)dest;
char* sr = (char*)src;
if (des > sr) //目标地址大于源地址 从后向前拷贝
{
while (count)
{
*(des + count-1) = *(sr + count - 1);
count--;
}
}
else //否则从前向后拷贝
{
while (count--)
{
*des++ = *sr++;
}
}
return dest;
}
int main()
{
int arr[10] = { 1, 2, 3, 4, 5 };
/*memmove(arr + 1, arr, 3 * sizeof(int));*/
/*my_memmove(arr + 1, arr, 3 * sizeof(int));*/
/*memmove(arr, arr + 1, 3 * sizeof(int));*/
my_memmove(arr, arr + 1, 3 * sizeof(int));
system("pause");
return 0;
}
模拟实现memset
#include <stdio.h>
#include <assert.h>
#include <string.h>
void* my_memset(void* dest, int c, size_t count)
{
assert(dest);
char* ptr = (char*)dest;
while (count--)
{
*ptr++ = c;
}
return dest;
}
int main()
{
char buffer[] = "This is a test of the memset function";
printf("Before: %s\n", buffer);
my_memset(buffer, '*' , 4);
printf("After: %s\n", buffer);
return 0;
}