博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试基础(二)-mem函数
阅读量:6215 次
发布时间:2019-06-21

本文共 2058 字,大约阅读时间需要 6 分钟。

常考的函数有下面三个,memset,memcpy,memmove,一定要记住三个函数的函数原型,熟记返回值类型和参数类型,当然也不能忘记参数检查

 

  • memset
1 #include
2 #include
3 using namespace std; 4 5 void *my_memset(void *s, int ch, size_t n) 6 { 7 assert(s); 8 char *ptr = (char *)s; 9 for (size_t i = 0; i < n; ++i)10 {11 *(ptr++) = ch;12 }13 return s;14 }15 16 17 int main()18 {19 char s[10];20 my_memset(s,'a',10);21 return 0;22 }

一定要先把void*的指针强制转化成char *再进行操作,不然拿void*是没办法的

  • memcpy
1 #include
2 using namespace std; 3 4 void *my_memcpy(void *dest, void *src, size_t n) 5 { 6 assert(dest && src); 7 char *pdest = (char *)dest; 8 char *psrc = (char *)src; 9 for (size_t i = 0; i < n; ++i)10 {11 *(pdest++) = *(psrc++);12 }13 return dest;14 }15 16 int main()17 {18 return 0;19 }

memcpy是没有考虑内存覆盖问题的,所以在进行自身拷贝的时候推荐使用memmove,VS2015的memcpy好像已经结局内存覆盖的问题了,但是为了跨平台的安全考虑,使用memmove是绝对没问题的

  • memmove
1 #include
2 #include
3 using namespace std; 4 5 6 void *my_memcpy(void *dest, void *src, size_t n) 7 { 8 assert(dest && src); 9 char *pdest = (char *)dest;10 char *psrc = (char *)src;11 for (size_t i = 0; i < n; ++i)12 {13 *(pdest++) = *(psrc++);14 }15 return dest;16 }17 void *my_memmove(void *dest, void *src, size_t count)18 {19 assert(dest && src);20 char *pdest = (char *)dest;21 char *psrc = (char *)src;22 if (psrc + count > pdest && pdst > psrc)//之前是这样的psrc + count > pdest,条件不完全,虽然没啥错就是了23 {24 for (int i = count - 1; i >= 0; i--)25 {26 *(pdest + i) = *(psrc + i);27 }28 }29 else30 {31 for (int i = 0; i < count; ++i)32 {33 *(pdest + i) = *(psrc + i);34 }35 }36 return dest;37 }38 39 40 41 int main()42 {43 char s1[] = "hello world";44 char s2[] = "hello world";45 my_memmove(s1+3,s1,6);46 my_memcpy(s2+3, s2 , 6);47 return 0;48 }

 

转载于:https://www.cnblogs.com/lenomirei/p/5460601.html

你可能感兴趣的文章
Eclipse快速打开当前文件所在文件夹
查看>>
AHK进阶之路
查看>>
Disksim下安装Flashsim
查看>>
靠谱推算不靠谱的问题
查看>>
学会sql数据库关系图
查看>>
刚体变换 相似变换 仿射变换 投影变换
查看>>
db2 cpu使用率高问题分析处理
查看>>
a标签,img标签,表格
查看>>
java基础 - 集合Collection
查看>>
常见端口。
查看>>
Ajax跨域请求保证同一个session的问题
查看>>
NOIP2018初赛游记
查看>>
再次求助。Source not found。问题
查看>>
你还在无休止的拼接html么?
查看>>
每天学点Linux-选取命令CUT和GREP
查看>>
zencart设置特价商品价格
查看>>
太白老师day6 1.代码块 2.is==id 3.小数据池
查看>>
Web项目测试流程总结
查看>>
flex布局
查看>>
第三方的 NET 数据库连接提供者,Lightswitch
查看>>