算法17:实现memcpy(void *src, int size, void *dest)
来源:互联网 发布:视频大数据分析 编辑:程序博客网 时间:2024/04/30 14:15
算法分析
这道题主要考察一下几点
1、对于参数非法的判断,空指针的判断和size大小的判断
2、源数据不能被改写
3、源数据和目标数据是否存在内存重叠
c++代码
不考虑内存重叠的情况
char* memcpy(char* dst,const char* src,size_t count){ char* ptr = dst; if(dst == NULL || src == NULL || count <= 0) { return NULL; } while(count--) { *dst++ = *src++; } //不能返回dst的,因为dst指针被++了 return ptr;}
考虑内存重叠的情况
char* memcpy(char* dst,const char* src,size_t count){ char* ptr = dst; if(dst == NULL || src == NULL || count <= 0) { return NULL; } //判断是否存在内存重叠 if(dst <= src || dst >= src+count) { //低地址先拷贝 while(count--) { *dst++ = *src++; } } else { //高地址先拷贝 dst = dst + count -1; src = src + count -1; while(count--) { *dst-- = *src--; } } return ptr;}
注意事项
函数参数count为size_t,是无符号类型,判断无符号数<0是没有任何意义的,如果传进来-1的数,会产生一个很大的无符号整型数据。所以要么在调用函数之前判断count是否为负数,要么memcpy参数由size_t改成int类型。
0 0
- 算法17:实现memcpy(void *src, int size, void *dest)
- extern void * memcpy(void *dest,void *src,unsigned int count)
- void* memcpy(void* dst, const void* src, int size)
- memcpy函数的使用总结void *memcpy(void *dest, const void *src, size_t n);
- 实现内存复制函数void * memcpy(void *dst,void *src,int count).
- 用C语言实现函数void * memmove(void *dest, const void *src, size_t n)。
- 用C语言实现函数void * memmove(void *dest, const void *src, size_t n)
- 用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- 用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- 用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n)
- 用C语言实现函数void * memmove(void *dest, const void *src, size_t n)
- 用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- void *memmove(void *dest, const void *src, size_t n) 的实现
- void* mymemcpy( void* dest, const void* src, size_t count )
- 函数(void*)memcpy(void *dest,con…
- 百度面试题——用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- 百度面试题——用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- void *memcpy(void *pvTo, const void *pvFrom, size_t size)
- yum 不能正常使用
- 【bzoj4034】[HAOI2015]树上操作(树链剖分+dfs序)
- h5c3内容04
- 2017GMTC全球移动技术大会——“11大顶级主题专场”
- Git:代码冲突常见解决方法
- 算法17:实现memcpy(void *src, int size, void *dest)
- spring ModelAttribute
- jQuery中ready与load事件的区别
- SurfaceView 画笔随机颜色满天星
- TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
- 阻止firefox自动升级更新工具
- Nginx负载均衡配置实例详解
- java list set array 转换
- CRC