![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
自己在linux系统下实现memcpy的功能,我的理解是memcpy可以处理任意的数据类型?非懂勿入,高手分享!
自己在linux系统下实现memcpy的功能,我的理解是memcpy可以处理任意的数据类型?原型是void*memcpy(void*dest,constvoid*src,...
自己在linux系统下实现memcpy的功能,我的理解是memcpy可以处理任意的数据类型?原型是void *memcpy(void *dest, const void *src, size_t n);这里的void *和void不是关键字的void而是表示可以处理任意的数据类型,我们一般自己写的时候只能处理自己定义类型例如我们处理char型,不能做到通用,linux的库是怎样做到通用的,下面是我写的代码,我感觉和它本身的函数库存在差别,因为它提供的函数接口可以处理我们提供的任意类型,它提供了通用的API,而我们在真实验证的自己写的不能写一个通用的API
如何自己编写一个mymemcpy实现通用的API呢,就是不论我们向这个API传递什么类型的数据,这个函数都能实现相应的功能,通用API接口怎么写,谢谢分享?
我的意思是系统给我们提供的API是通用的,不管我们在main函数中第一的dest...和src...是什么类型,我们只要传递了dest的首地址和src的首地址它都能处理,我的意思是写一个通用API不管我们主函数的dest。。。和src。。。类型如何变化都能处理,这样才和c库提供给我们的memcpy的API具有相同的功能,对吧,能不能在函数里面封装所有的数据类型,通过检测数据类型做到想系统提过的API一样做到通用,这里是涉及到嵌入式linux系统下,别的系统不讨论! 展开
如何自己编写一个mymemcpy实现通用的API呢,就是不论我们向这个API传递什么类型的数据,这个函数都能实现相应的功能,通用API接口怎么写,谢谢分享?
我的意思是系统给我们提供的API是通用的,不管我们在main函数中第一的dest...和src...是什么类型,我们只要传递了dest的首地址和src的首地址它都能处理,我的意思是写一个通用API不管我们主函数的dest。。。和src。。。类型如何变化都能处理,这样才和c库提供给我们的memcpy的API具有相同的功能,对吧,能不能在函数里面封装所有的数据类型,通过检测数据类型做到想系统提过的API一样做到通用,这里是涉及到嵌入式linux系统下,别的系统不讨论! 展开
1个回答
展开全部
#include<stddef.h>
#include<assert.h>
void *mymemcpy(void *dest, const void *src, size_t n)
{
assert(dest!=NULL&&src!=NULL);
char* tmp=(char*)dest;
const char*s=(const char*)src;
for(size_t i=0;i<n;i++)
{
tmp[i]=s[i];
}
return dest;
}
DevC++测试通过
#include<assert.h>
void *mymemcpy(void *dest, const void *src, size_t n)
{
assert(dest!=NULL&&src!=NULL);
char* tmp=(char*)dest;
const char*s=(const char*)src;
for(size_t i=0;i<n;i++)
{
tmp[i]=s[i];
}
return dest;
}
DevC++测试通过
更多追问追答
追问
假设主函数里面dest里面存放的是结构体数据或整形数据你这个函数接口还能处理吗?不能把,没有实现向c库里提供的通用API功能
追答
可以,后面的n是你要拷贝的大小,和数据类型无关
![](https://ecmc.bdimg.com/public03/b4cb859ca634443212c22993b0c87088.png)
2024-11-19 广告
启帆信息是英伟达中国区代理商,原厂授权代理,提供全面的软件技术解决方案以及NVIDIA以太网产品、交换机等产品,欢迎前来咨询!...
点击进入详情页
本回答由启帆信息提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询