一、memcpy—— 其他类型拷贝
实现:
#include <stdio.h>
#include <string.h>
int main()
{
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[10] = { 0 };
memcpy(arr2, arr1, 20);
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
模拟实现:
#include <stdio.h>
#include <assert.h>
void* my_memcpy(void* dest, const void* scr, size_t sp)
{
assert(dest && scr);
char* ret = dest;
int i = 0;
for (i = 0; i < sp; i++)
{
*((char*)dest + i) = *((char*)scr + i);
}
return ret;
}
int main()
{
int arr1[20] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[20] = { 0 };
int sz = sizeof(arr2[0]);
int n = 6;
int num = n * sz;
my_memcpy(arr2, arr1, num);
int i = 0;
for (i = 0; i < n; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
二、memmove—— 重叠拷贝
实现:
#include <stdio.h>
#include <string.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
memmove(arr + 2, arr, 20);
return 0;
}
模拟实现:
#include <stdio.h>
#include <assert.h>
void* my_memmove(void* dest, void* scr, size_t n)
{
assert(dest && scr);
char* ret = dest;
int i = 0;
if (dest < scr)
{
for (i = 0; i < n; i++)
{
*((char*)dest + i) = *((char*)scr + i);
}
}
else
{
for (i = n-1; i >= 0; i--)
{
*((char*)dest + i) = *((char*)scr + i);
}
} return ret;
}
int main()
{
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr1[0]);
int k = sizeof(arr1) / sz;
int n = 5;
int num = n * sz;
my_memmove(arr1+2, arr1, num);
int i = 0;
for (i = 0; i < k; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
三、memcmp——比较大小
实现:
#include <stdio.h>
#include <string.h>
int main()
{
int arr1[10] = {1,2,3,4,5,6};
int arr2[10] = { 1,2,4,5,6,7 };
int ret = memcmp(arr1, arr2, 8);
if (ret < 0)
{
printf("arr1小于arr2\n");
}
else if (ret == 0)
{
printf("arr1等于arr2\n");
}
else
{
printf("arr1大于arr2\n");
}
return 0;
}