memcpy函数的实现
1.按1个字节拷贝
(1)不要直接使用形参,要转换成char*
(2)目标地址要实现保存
(3)要考虑源和目标内存重叠的情况
void * mymemcpy(void *dest, const void *src, size_t count)
{
if (dest == NULL || src == NULL)
return NULL;
char *pdest = static_cast <char*>(dest);
const char *psrc = static_cast <const char*>(psrc);
int n = count;
if (pdest > psrc && pdest < psrc+count)
{
for (size_t i=n-1; i != -1; --i)
{
pdest[i] = psrc[i];
}
}
else
{
for (size_t i= 0; i < n; i++)
{
pdest[i] = psrc[i];
}
}
return dest;
}
2.按4个字节拷贝
(1)转成int*,按照每次4个字节来拷贝,不足四个字节的按一个字节拷贝
void *mymemcpy(void *dst,const void *src,size_t num)
{
assert((dst!=NULL)&&(src!=NULL));
int wordnum = num/4;//计算有多少个32位,按4字节拷贝
int slice = num%4;//剩余的按字节拷贝
int * pintsrc = (int *)src;
int * pintdst = (int *)dst;
while(wordnum--)*pintdst++ = *pintsrc++;
while (slice--)*((char *)pintdst++) =*((char *)pintsrc++);
return dst;
}
memcpy函数的实现的更多相关文章
- memcpy函数用法
memcpy函数用法 .分类: VC++ VC++ mfc matlab 2011-12-01 19:17 14538人阅读 评论(0) 收藏 举报 null 原型:extern void *memc ...
- C语言之memcpy函数
昨天自己动手实现memcpy这个函数,用一个例程试了一下,结果正确,满心欢心,可是有些地方想不明白,于是百度了一下,结果自己写的函数简直无法直视. 觉得还是写个总结,以示教训. 先贴上我自己的函数: ...
- 【转】【C/C++】实现memcpy函数
本文转自:http://my.oschina.net/renhc/blog/36345 面试中如问到memcpy的实现,那就要小心了,这里有陷阱. 先看下标准memcpy()的解释: ? 1 2 vo ...
- memcpy函数
实现1:<高质量c++,c编程指南> void *mymemcpy(void *dst,const void *src,size_t num) { assert((dst!=NULL)&a ...
- memcpy函数的使用方法
c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. 1.函数原型 void *memcpy(void * ...
- memset memcpy函数
memset 函数 1.其头文件为: #include<memory> 或者#include<string> 2.原型 看清是对每个字节,不是其类型 void *mems ...
- sprintf、strcpy 及 memcpy 函数区别
这些函数的区别在于 实现功能 以及 操作对象 不同.strcpy 函数操作的对象是 字符串 ,完成 从 源字符串 到 目的字符串 的 拷贝 功能. sprintf 函数操作的对象 不限于字符串 :虽然 ...
- C语言memcpy函数的用法
介绍 memcpy是memory copy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它.它的函原型如下: void *memcpy(void *dest, const void *sr ...
- 0.11内核rd_load@ramdisk.c中memcpy函数好像有bug
0.11内核rd_load@ramdisk.c中memcpy函数好像有bug,如:#define memcpy(dst,src,n) \ __asm__("cld;rep;movsl& ...
- 利用memcpy函数实现float到QByteArray的相互转化
一.为什么要实现float到QByteArry之间的相互转化 在总线通讯过程中(例如串口通讯),总线上传输的是字节数组变量,即ByteArray型的变量,在Qt中即为QbyteArray型变量.总线发 ...
随机推荐
- 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件
小程序导入,别人导出的数据库json文件,错误信息如下: 导入数据库失败, Error: Poll error, 导入数据任务(id:373985)异常,错误信息:解析导入文件错误,请检查导入文件内容 ...
- ubunt 文件permission denied问题的解决
在linux系统使用过程中,升级python到3.6以后,执行pip命令,遇到permission denied问题,系统显示如下: -bash: /home/www/my_flask/venv/bi ...
- LeetCode 1216. Valid Palindrome III
原题链接在这里:https://leetcode.com/problems/valid-palindrome-iii/ 题目: Given a string s and an integer k, f ...
- Shell编程——多命令顺序执行、管道、grep命令
1.多命令执行符: (1)命令1:命令2 多个命令顺序执行,没有逻辑联系,即使命令1出错,命令2依旧执行. (2)命令1&&命令2:只有命令1正确执行,命令2才能正确执行:命令1 ...
- 网络协议 10 - Socket 编程(上)
前面一直在说各种协议,偏理论方面的知识,这次咱们就来认识下基于 TCP 和 UDP 协议这些理论知识的 Socket 编程. 说 TCP 和 UDP 的时候,我们是分成客户端和服务端来认识的, ...
- 第08组 Beta冲刺(5/5)
队名:955 组长博客:点这里! 作业博客:点这里! 组员情况 组员1(组长):庄锡荣 过去两天完成了哪些任务 文字/口头描述 部署新服务器 展示GitHub当日代码/文档签入记录 接下来的计划 准备 ...
- Lab2:物理内存管理
前言 现在内存管理的方法都是非连续内存管理,也就是结合段机制和分页机制 段机制 段地址空间 进程的段地址空间由多个段组成,比如代码段.堆栈段和符号表段等等 段对应一个连续的内存"块" ...
- 【转】android实时视频网络传输方案总结(一共有五套)
最近研究了Android的实时视频网络传输问题,在视频处理方面花费了大量精力进行研究,总结出以下五套方案,并加以比较 以320×240大小的视频传输为例 方案 压缩率 压缩/传输方式 实时性 平均流量 ...
- zooKeeper使用记录
背景:记录zooKeeper使用过程中遇到的问题. 在删除zooKeeper相关节点的时候需要进行权限的认证,下面的连接讲的还是很详细的 zookeeper的ACL权限控制
- Python 3.X 练习集100题 01
有以下几个数字:1.2.3.4.5,能组成多少个互不相同且无重复数字的三位数?都是多少? 方法1: import itertools from functools import reduce lyst ...