首页 > 其他分享 >memcpy/memmove模拟实现

memcpy/memmove模拟实现

时间:2023-07-25 12:45:09浏览次数:36  
标签:src memmove dest void char int num memcpy 模拟

void* my_memmove(void* dest, const void* src, size_t num)
{
assert(dest && src);
void* ret = dest;
if ((char*)dest < (char*)src)//从前向后移
{
while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
else
{
dest = (char*)dest + num;
src = (char*)src + num;
while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest - 1;
src = (char*)src - 1;//从后向前移
}
}
return ret;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
memmove(arr+2, arr, 20);
my_memmove(arr, arr+2, 20);

for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
struct s
{
char name[20];
int age;
};
void* my_memcpy(void* dest, const void * src, size_t num)
{
assert(dest && src);
void* ret = dest;

while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest+1;//
src = (char*)src+1;//
}
return ret;
}
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[5] = { 0 };
struct s arr3[2] = { {"张三",20},{"李四",25} };
struct s arr4[3] = { 0 };
//memcpy(arr2, arr1, sizeof(arr1));//源头arr1的内存的大小
//vs环境下 memcpy 可以处理重叠拷贝的
my_memcpy(arr2, arr1, sizeof(arr1));//源头arr3的内存的大小

return 0;
}

标签:src,memmove,dest,void,char,int,num,memcpy,模拟
From: https://www.cnblogs.com/zrk-8008/p/17579607.html

相关文章

  • SpringBoot中使用测试框架MockMvc来模拟HTTP请求测试Controller接口
    场景Java中进行单元测试junit.Assert断言、Mockito模拟对象、verify验证模拟结果、Java8中lambda的peek方法使用:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/127492361上面讲了开发过程中一些测试方法。如果需要在代码中直接测试某个Controller接口,除了每次启......
  • 在 Arch 配置 i3-wm 终端模拟器 xterm
    在Arch配置i3-wm终端模拟器xterm关于怎么在Arch安装i3-wm可以查看上一篇文章......
  • 「赛后总结」20230724 CSP 模拟赛
    「赛后总结」20230724CSP模拟赛点击查看目录目录「赛后总结」20230724CSP模拟赛总结。题解T1最长上升子序列ARC125C思路代码T2独特序列ARC125D思路代码T3最大GCDARC126C思路代码T4连续子段ARC126D思路代码想听歌,想看巨人,但是没有条件。总结。rk1三个首杀,前......
  • CSP 模拟 4
    今日推歌:SerenadeinG‘EinekleineNachtmusik’K525-WolfgangAmadeusMozart今天比赛直接搬的ARC125,126的CD题,那这样我也能出模拟赛(但是为什么HZOI2022都不写比赛题解,差评今天被HZOI2023,2024薄纱,我直接退役得了T1最长上升子序列考虑一个明显字典序不是......
  • strncmp/strstr 模拟实现
    constchar*my_strstr(constchar*str1,constchar*str2){ assert(str1&&str2); if(!*str2)//逆反逻辑,非0为真,假假为真 returnstr1; constchar*p1=NULL;//不改变str1和str2 constchar*p2=NULL; constchar*start=str1; while(*start) { p1=start;//p1需......
  • C语言模拟银行排队叫号系统(链队)
    一.队列队列是一种具有先进先出(FIFO)特性的线性数据结构,它只允许在队列的两端进行插入和删除操作。队列的一端称为队尾(rear),另一端称为队头(front)。新元素总是插入在队列的队尾,而从队列中删除元素时则总是删除队头元素。由于队列具有FIFO特性,因此队列通常用于需要按照顺序处理数据的场......
  • CSP模拟3 <反思>
    t3:不要随便用mapt4:代码转移要删全首先考虑暴力,类似线段树,首先你要先dfs出每个节点子树的左右节点,然后修改查询时要考虑左儿子右边界是否大于查询左边界,右儿子左边界是否小于查询有边界,进行\(dfs\)\((46pts)\)点击查看代码#include<bits/stdc++.h>#defineintlonglongu......
  • CSP 模拟 3
    今天感觉很热,但是天气转凉的时候我也该退役了吧。今日推歌:透明哀歌-n-buna/Gumiecho-Crusher-P/GumiEnglish歌词Theclockstoppedticking,时钟停止发出嘀嗒声Foreverago.在很久以前HowlonghaveIbeenup?我究竟醒来了多久?Idon'tknow.我不知道Ican't......
  • CSP 模拟 2
    感觉像是noi模拟赛多了个pT1F咋做都行,但是考场上的正确做法被后来优化RE了,痛失60pts其中一种做法是考虑只有\(a_1\oplusb_i\)有可能成为答案,然后验证即可T2S定义dp状态\(f_{i,j,k,0/1/2}\)为用了\(i\)个红球,\(j\)个绿球,\(k\)个红球,并且最后一位是什么球......
  • java 爬虫模拟登陆 拿到cookies
    实现Java爬虫模拟登录获取Cookies概述在这篇文章中,我将教你如何使用Java编程语言实现爬虫模拟登录并获取Cookies。爬虫模拟登录是一种常见的网络爬虫技术,它可以模拟用户登录网站,获取登录后才能访问的资源。流程概览下面是整个模拟登录获取Cookies的流程概览:步骤描述......