写一个函数,完成内存之间的拷贝。[考虑问题是否全面]
2015-09-28 15:30
393 查看
#include "stdafx.h" #include <stdio.h> #include <string.h> #include <assert.h> void *memmove(void *dest, const void *src, size_t count) { assert((dest != NULL) && (src != NULL)); //安全检查 assert(count > 0); char *psrc = (char *)src; char *pdest = (char *)dest; //检查是否有重叠问题 if (pdest < psrc) { //正向拷贝 while (count--) *pdest++ = *psrc++; } else if (psrc < pdest) { //反向拷贝 psrc = psrc + count - 1; pdest = pdest + count - 1; while (count--) *pdest-- = *psrc--; } return dest; } void *memmcpy(void *dest, const void *src, size_t count) { assert((dest != NULL) && (src != NULL)); //安全检查 assert(count > 0); char *psrc = (char *)src; char *pdest = (char *)dest; while (count--) *pdest++ = *psrc++; return dest; } int main() { char str[] = "helloworld!"; memmove(str + 3, str, 4); char str1[] = "helloworld!"; memmcpy(str1 + 3, str1, 4); printf("%s\n", str); printf("%s\n", str1); getchar(); return 0; }
相关文章推荐
- (工作笔记)实现网页从弹窗页面单选框传值至父页面
- 安卓:绑定服务的一个小应用
- php使用jsonjson_encode存入数据库乱码
- 电视盒子及其游戏 会成为挑战主机的未来吗
- DNS安全
- 用户权限怎么添加
- C#中form窗体之间的传递几个方法学习
- Android学习笔记-junit测试
- 自定义缓冲加载界面
- Android中弹出对话框,AlertDialog关键代码
- ArcEngine开发 第六章小结
- 将本地的代码备份到GitHub上
- rsyslog+mysql+loganalyzer 环境搭建日志服务器
- Spring Batch Example – CSV File To MySQL Database (四)
- mysql拼音转化
- CentOS使用安装光盘建立本地软件源
- 从github上同步代码到本地
- swifty引用AFNetworking出现clang: error: linker command failed with exit code 1 (use -v to see invocation
- httpd属性配置
- 获取Spring容器中Bean实例的工具类(Java泛型方法实现)