1,memcpy
2,memmove
3,memcmp
4,memset
------------------------------------------------------------------------------------------------------------------
1,memcpy
复制代码
#include<stdio.h>
//memcpy
//内存拷贝函数
//int main() {
// int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
// int arr2[20] = { 0 };
// memcpy(arr2, arr1, 20);//注意memcpy的函数参数类型是void (20字节,对应5个int数 )
// int i = 0;
// for ( i = 0; i < 5; i++)
// {
// printf("%d ", arr2[i]);
// }
//
// return 0;
//}
//模拟实现memcpy
#include<assert.h>
//void* my_memcpy(void* dest, const void* src, size_t num) {
// assert(dest && src);
// void* ret = dest;
// while (num--) {
// *(char*)dest = *(char*)src;
// dest = (char*)dest + 1;
// src = (char*)src + 1;
//
// }
// return ret;
//}
//
//void test1() {
// int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
// int arr2[20] = { 0 };
// my_memcpy(arr2, arr1, 20);//注意memcpy的函数参数类型是void (20字节,对应5个int数 )
// int i = 0;
// for (i = 0; i < 10; i++)
// {
// printf("%d ", arr2[i]);
// }
// printf("\n");
//}
#include<string.h>
void test2() {
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//my_memcpy(arr1+2, arr1, 20);//注意memcpy的函数参数类型是void (20字节,对应5个int数 )
memmove(arr1 + 2, arr1, 20);
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", arr1[i]);
}
}
int main() {
test1();
test2();
return 0;
}
//memcpy 负责拷贝两块独立空间中的数据
//重叠内存的拷贝,是怎么做的呢? ===>memmove
2,memmove
复制代码
//模拟实现memmove
#include<stdio.h>
#include<string.h>
//void* my_memmove(void* dest, const void* src, size_t num) {
assert(dest && src);
void* ret = dest;
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;
}
void test3() {
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//my_memcpy(arr1+2, arr1, 20);//注意memcpy的函数参数类型是void (20字节,对应5个int数 )
my_memmove(arr1 , arr1+2, 20);// 将 3,4,5,6,7 移到 1,2,3,4,5
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", arr1[i]);
}
}
int main() {
//test1();
test3();
return 0;
}
3,memcmp
复制代码
#include<stdio.h>
//memcmp
//
int main() {
int arr1[] = { 1,2,3,4,5 };//10 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00
int arr2[] = { 1,3,2 };//01 00 00 00 03 00 00 00 02 00 00 00
int ret = memcmp(arr1, arr2, 12);
printf("%d\n", ret);
return 0;
}
4,memset
复制代码
#include<stdio.h>
//memset
int main() {
char arr[] = "hello bit";
memset(arr, 'x', 5);
//memset(arr+6, 'x', 3);
printf("%s\n", arr);
//int arr[10] = { 0 };
////把arr初始化全为一
//memset(arr, 1, 40);
//int i = 0;
//for ( i = 0; i < 10; i++)
//{
// printf("%d\n", arr[i]);
//}
return 0;
}