网红自助下单网站/淘宝搜索关键词排名查询工具
文章目录
- memset 用ch字符填充缓冲区
- memcmp 比较两块缓冲区
- memcpy 把一个缓冲区的数据复制到另一个缓冲区
- memmove 把一个缓冲区数据移动到另一个缓冲区(可自赋值)
- 所需头文件:stdio.h
- 仿写之前先讲讲void,这个类型
- 不能用来定义普通变量,但是可以定义无类型指针 void* vp;
- 无类型指针void* 不可以直接解引用、vp++、vp–操作,使用该操作之前必须强制类型转换;
仿写示例:
//memset
void* memset_my(void* mem_addr, unsigned char ch, size_t size)
{if (mem_addr == NULL) return NULL;unsigned char* p = (unsigned char*)mem_addr;while (size--){*p++ = ch;}return mem_addr;
}
//memcmp_my
int memcmp_my(const void* des_str, const void* src_str, size_t size)
{if (des_str == NULL || src_str == NULL){return -1;}if (size == 0){return 0;}const char* des = (const char*)des_str;const char* src = (const char*)src_str;while (size != 0 && *des == *src){size--;des++;src++;}return (*des - *src) > 0 ? 1 : (*des - *src < 0 ? -1 : 0);
}int main()
{int arr[10] = {1, 2, 3, 4, 5, 6 , 7, 8 ,9, 10};int brr[10] = {1, 2, 3, 9, 5, 6 , 7, 8 ,9, 10};//memset_my(arr, 0, sizeof(int) * 10);printf("%d\n", memcmp_my(arr, brr, sizeof(arr)));return 0;
}
//memcpy_my
void* memcpy_my(char* des, const char* src, size_t size)
{if (des == NULL || src == NULL || size <= 0){return NULL;}char* dp = (char*)des;const char* sp = (const char*)src;while (size--){*dp++ = *sp++;}return des;}int main()
{int arr[5] = { 1, 2, 3, 4, 5 };int brr[5];memcpy_my(brr, arr, sizeof(arr));for (int i = 0; i < 5; i++){printf("%d ", brr[i]);}return 0;
}
void* memmove_my(char* des, const char* src, size_t size)
{if (des == NULL || src == NULL || size <= 0){return NULL;}char* dp = (char*)des;const char* sp = (const char*)src;//正向拷贝if (des <= src || des - size >= src){ while (size--){*dp++ = *sp++;}return des;}//逆向拷贝else{dp = (char*)des + size - 1;sp = (const char*)src + size - 1;while (size--){*dp-- = *sp--;}return des;}
}int main()
{int arr[5] = { 1, 2, 3, 4, 5 };//int brr[5];//34545//memmove_my(arr, arr + 2, sizeof(int) * 3);//12123memmove_my(arr + 2, arr, sizeof(int)*3);for (int i = 0; i < 5; i++){printf("%d ", arr[i]);}return 0;
}