模拟实现memcpy 与 memmove
2.memcpy内存处理函数:不涉及'\0',需要包含头文件 string.h
3.source的内存不能超过destination的内存大小
4.存在缓冲区的重合问题,要保证destination指向有效的区域:可以用从右往左拷贝的方法
//memmove可以解决mencoy的缓冲区重合的问题
#include<stdio.h>
#include<assert.h>
void Memcpy(void* destination, const void* source, size_t num)
{
assert(destination != );
assert(source != );
char* dest = (char*)destination;
char* sour = (char*)source;
for (size_t i = ; i < num; i++)
{
dest[i] = sour[i];
}
return destination;
}
void Memmove(void* destination, const char* source, size_t num)
{
assert(destination != );
assert(source != );
char* dest = (char*)destination;
char* sour = (char*)source;
//两种情况:
if (sour<dest&&sour + num>dest)
{
//1.缓冲区重合就从后往前拷贝
for (int i = num - ; i >= ; --i)
{
dest[i] = source[i];
}
}
else
{
//2.缓冲区没重合,代码和memcpy一样
Memcpy(destination, source, num);
}
}
int main()
{
int arr1[] = { ,,, };
int arr2[] = { };
Memcpy(arr2, arr1, sizeof(arr1));
for (int i = ; i < sizeof(arr1) / sizeof(int); i++)
{
printf("%d",arr2[i]);
}
return ;
}
模拟实现memcpy 与 memmove的更多相关文章
- memcpy vs memmove
[本文连接] http://www.cnblogs.com/hellogiser/p/memcpy_vs_memmove.html [分析] memcpy与memmove的目的都是将N个字节的源内存地 ...
- memcpy与memmove的区别
在面试中经常会被问道memcpy与memove有什么区别? 整理如下: 其实主要在考C的关键字:restrict C库中有两个函数可以从一个位置把字节复制到另一个位置.在C99标准下,它们的原型如下: ...
- C语言实现memcpy和memmove
0.两者比较: memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中.但复制后src内容会被 ...
- memcpy、memmove、memset及strcpy函数实现和理解
memcpy.memmove.memset及strcpy函数实现和理解 关于memcpy memcpy是C和C++ 中的内存拷贝函数,在C中所需的头文件是#include<string.h> ...
- 关于memcpy和memmove的一点说明
今天看到书上降到memcpy和memmove的区别才突然发现原来两者之间有如此区别,以前只知道这两个函数是 实现同样的功能,没有接触到其不同. memcpy和memmove在MSDN的定义如下: 从两 ...
- strcpy()、memcpy()、memmove()、memset()的内部实现
一直想知道 strcpy().memcpy().memmove().memset()的内部实现 strcpy(), 字符串拷贝. char *strcpy(char *strDest, const c ...
- 第 16 章 C 预处理器和 C 库(string.h 库中的 memcpy() 和 memmove())
/*----------------------------------------- mems.c -- 使用 memcpy() 和 memmove() ---------------------- ...
- memcpy、memmove、memset、memchr、memcmp、strstr详解
第一部分 综述 memcpy.memmove.memset.memchr.memcmp都是C语言中的库函数,在头文件string.h中.memcpy和memmove的作用是拷贝一定长度的内存的内容,m ...
- C/C++之Memcpy and memmove
memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中. 但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开 ...
随机推荐
- net core2 采坑-- session 缓存
引用 Microsoft.Extensions.Caching.SqlServer 可以设置存在数据库 Microsoft.Extensions.Caching.Redis 存在redis 参考 ht ...
- 用Java给数组排序
public class BubbleDemo {public static void main(String[] args) { int arr[]={1,3,5,7,2,4,6,8,9}; bub ...
- SQL-6查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序
题目描述 查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序CREATE TABLE `employees` (`emp_no` int(11) NOT N ...
- python 爬虫第三方库
这个列表包含与网页抓取和数据处理的Python库 网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pycurl). pycurl – 网络 ...
- HDU 1004 Let the Balloon Rise(map应用)
Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...
- POJ 2234 Matches Game(Nim博弈裸题)
Description Here is a simple game. In this game, there are several piles of matches and two players. ...
- Android直播实现srs流媒体服务器部署
链接:http://blog.csdn.net/mr_sk/article/details/71086885 在配置文件中加入 pid 参数执行
- 操作cookie篇
1.设置cookie setcookie(key,value); 2.设置cookie有效期(默认值0,浏览器关闭失效,PHP_INT_MAX最大值,永久不失效,time()-1,删除cookie) ...
- Buildroot Savedefconfig
/********************************************************************************* * Buildroot Saved ...
- 数据结构与算法Java描述 队列
package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...