使用memcpy移动数据位置的思考
来源:互联网 发布:安卓软件限速 编辑:程序博客网 时间:2024/06/06 02:44
使用memcpy将一段数据整体向前移动没有问题,但是整体向后移动会造成数据拷贝错误
【在centos系统中这种方法没有发现问题,但是在后续的开发中,在将代码移植到ubuntu系统时,发现向前移动也会有问题,不同linux版本该函数的实现方法不同;所以建议不要使用这种方法移动内存区,可以使用临时变量或其它方法实现数据移动】
数据向前移动图示:
数据向后移动图示:
测试程序:
#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>void my_memcpy(int *dst, const int *src, size_t len); /* 模拟memcpy函数 */int main(){ int len = 15; int *arr = (int *)calloc(len, sizeof(int)); /* 赋值 */ int i=0; for(i=0; i<len; i++) { *(arr+i) = i+1; // 1 - 15 } for(i=0; i<len; i++) { printf("%d\t", *(arr+i)); } printf("\n"); /* 所有项后移三个单位长度 */ /* my_memcpy(arr+3, arr, len-3); */ /* 所有项前移三个单位长度 */ my_memcpy(arr, arr+3, len-3); for(i=0; i<len; i++) { printf("%d\t", *(arr+i)); } printf("\n"); return 0;}void my_memcpy(int *dst, const int *src, size_t len){ int i=0; for(i=0; i<len; i++){ *(dst+i) = *(src+i); }}
向前移动结果:
向后移动结果:
总结:
由于memcpy函数是从指针的起始位置开始依次向后移动,而后面的数据会在遍历的同时被修改,当指针移动到被修改的数据时该数据早已不是原始的数据了
0 0
- 使用memcpy移动数据位置的思考
- 移动数据位置[基础]
- 移动web页面使用字体的思考
- 移动web页面使用字体的思考
- 移动web页面使用字体的思考
- 移动端关于使用字体的思考
- 由 memcpy 与 memset 引发的思考
- 内存拷贝函数(memcpy)的深入思考
- 使用memcpy进行数组元素移动
- 移动端数据收集思考
- memcpy的使用学习
- memcpy的使用问题
- memcpy的使用
- memcpy,_tcscpy_s的使用
- memcpy的使用
- memcpy函数的使用
- memcpy的使用
- memcpy的使用
- C++_运算符重载_前缀自增与后缀自增
- 三分钟get13个神级邮件营销技巧!
- 免费且超级好用的搜索引擎INSO
- jquery is用法
- SQL查询的时候可自带循环
- 使用memcpy移动数据位置的思考
- 对linux设备驱动中的并发控制相关内容的理解
- G - MZL's simple problem-HDU 5349 -模拟multiset
- hdoj-1593-find a way to escape【数学题】
- 关于用第三方Masonry约束适配
- 网页版的计算器,支持键盘输入,支持删除,按键发亮
- MFC中CMainFrame类CDoc类CView类CApp类之间关系
- Linux通过samba访问windows文件
- c# Lambda表达式