memmove和memcpy函数
来源:互联网 发布:asp无组件上传源码 编辑:程序博客网 时间:2024/06/07 10:42
两个函数都在头文件string.h中定义,函数原型为:
void * __cdecl memcpy(void *dst, const void *src, size_t count);
void * __cdecl memmove(void *dst, const void *src, size_t count);
void * __cdecl memcpy(void *dst, const void *src, size_t count);
void * __cdecl memmove(void *dst, const void *src, size_t count);
实现代码如下:
void * __cdecl memcpy(void *dst, const void *src, size_t count){ void *ret = dst; while (count--) { // 注意,memcpy函数没有处理dst和src区域是否重叠的问题 *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return(ret);}void * __cdecl memmove(void *dst, const void *src, size_t count){ 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);}
总结一下:
当src和dst区域没有重叠或者有重叠但不影响数据拷贝时,两个函数是完全一样的。条件是:dst <= src || (char *)dst >= ((char *)src + count。否则,memcpy是不能正常工作的,memmove是可以正常工作的。
0 0
- memcpy 和 memmove 函数
- memmove和memcpy函数
- 实现memcpy和memmove函数
- 实现memcpy( )和memmove( )函数
- 实现memcpy和memmove函数
- memcpy函数 和 memmove函数 原码
- memcpy函数和memmove函数的区别
- memcpy和memmove函数的实现
- memcpy和memmove函数的比较
- memcpy和memmove函数的实现
- strcpy、memcpy和memmove函数源码
- memcpy和memmove函数的比较
- memcpy()和memmove()函数之间区别
- memcpy和memmove函数
- memcpy()和memmove() 函数的介绍
- memcpy和memmove的函数内部实现
- 模拟实现memcpy和memmove函数
- 内存操作函数memcpy和memmove
- TensorFlow学习笔记(二)——实例Softmax Regression识别手写数字
- TCP详解
- 正则表达式
- redux服务端渲染流程
- Android中的主题
- memmove和memcpy函数
- PowerDesigner中NAME和COMMENT的互相转换
- 高并发下数据库优化
- 用CMake构建Qt5项目
- Codeforces Gym 100623B Problem B. Billboard
- volatile
- [LeetCode] 290. Word Pattern
- mtk preloader简单分析
- 用更少的代码发起异步 action