实现c中memcpy函数
来源:互联网 发布:植物大战僵尸 for mac 编辑:程序博客网 时间:2024/05/21 17:21
1、memcpy库函数
memcpy函数在C语言中的<string.h>中,在C++的<cstring>中。
函数原型:void * memcpy(void * dest, void * src, size_t num);
功能:将指针src所指向的内存中的num个字节拷贝到dest中去;
库函数中的memcpy没有考虑内存重叠的情况,因此他并不是安全的。
2、函数实现
根据上一篇博客的介绍,指出了memcpy可能会出现“内存重叠”的问题。
没有考虑内存重叠的memcpy函数
void *my_memcpy(void *dest, const void *src, size_t count) //没有考虑内存重叠情况{ assert(dest != NULL && src != NULL); char *tmp = dest; const char *s = src; while (count--) *tmp++ = *s++; return dest;}
改进,考虑内存重叠的情况
void * my_memcpy(void *dst,const void *src,unsigned int count) { assert(dst != NULL); assert(src != NULL); void * ret = dst; if (dst <= src || (char *)dst >= ((char *)src + count))//源地址和目的地址不重叠,低字节向高字节拷贝 { while(count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } } else //源地址和目的地址重叠,高字节向低字节拷贝 { dst = (char *)dst + count - 1; src = (char *)src + count - 1; while(count--) { *(char *)dst = *(char *)src; dst = (char *)dst - 1; src = (char *)src - 1; } } return ret; }
阅读全文
0 0
- 实现c中memcpy函数
- C/C++--memcpy函数实现
- C语言中strcpy与memcpy函数实现与区别
- C中strcpy与memcpy函数实现与区别
- 【C语言】memcpy函数的实现
- memcpy/memset函数的c语言实现
- C语言模拟实现memcpy,memmove函数
- [C练习]实现memcpy原型函数
- 【c语言】模拟实现memcpy()、memmove()函数
- memcpy/memset函数的c语言实现
- C中字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现
- 【c/c++】memcpy()函数
- 【C语言】【面试题】【笔试题】模拟实现数据库中memcpy函数
- C语言中strlen、strcpy、strncpy、strcat、strnact、strcmp、memcpy函数的实现
- C语言中strlen、strcpy、strncpy、strcat、strnact、strcmp、memcpy函数的实现
- C语言中字符串相关函数的实现(strcat strlen strcmp strcpy memcpy)
- C 函数 strncpy && memcpy
- C语言memcpy()函数
- JNI C创建Java字符串数组
- ionic3(二)登录页制作
- A Serial Killer
- Problems & Solutions -- 4
- QEMU和KVM 中断处理过程
- 实现c中memcpy函数
- Activit5.19 explorer部署流程中文乱码
- C语言数据类型-指针类型和空类型
- Android学习笔记——UI基础
- npm的package.json介绍
- 一分钟了解“主成分分析PCA”
- Keras学习(2)-一些概念
- java基础之集合类
- 机器学习(一)