博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
41.内存函数实现(memcpy,memset,memmove,memicmp,memchr.memccpy)
阅读量:4356 次
发布时间:2019-06-07

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

  • memcpy
    1 #include 
    2 #include
    3 #include
    4 5 void * mymemcpy(void* _Dst, void const* _Src, size_t _Size) 6 { 7 if (_Dst == NULL || _Src == NULL) 8 { 9 return NULL;10 }11 12 //转化成char类型,一次前进一个字节13 char *dst = _Dst;14 char *src = _Src;15 16 for (int i = 0; i < _Size; i++)17 {18 dst[i] = src[i];19 }20 21 return _Dst;22 }23 24 void main()25 {26 int a[10] = { 1,2,3,4,5,6,7,8,9,10 };27 int *p = malloc(sizeof(int) * 10);28 int *tmp = mymemcpy(p, a, 40);29 30 for (int i = 0; i < 10; i++)31 {32 printf("%d\n" ,p[i]);33 }34 35 char str[100] = "hello world";36 char mystr[100];37 mymemcpy(mystr, str, strlen(str) + 1);38 39 printf("%s\n", mystr);40 41 system("pause");42 }

     

  • memset
    1 void *mymemset(void *_Dst, int _Val, size_t _Size) 2 { 3     if (_Dst == NULL || _Val == NULL) 4     { 5         return; 6     } 7  8     for (int i = 0; i < _Size; i++) 9     {10         ((char *)_Dst)[i] = _Val;11     }12 13     return _Dst;14 }

     

  • memmove
    1 void * mymemmove(void *_Dst, const void *_Src, size_t _Size) 2 { 3     if (_Dst == NULL || _Src == NULL) 4     { 5         return NULL; 6     } 7  8     void *psrc = malloc(_Size);//分配内存 9     memcpy(psrc, _Src, _Size);10     memcpy(_Dst, psrc, _Size);11     free(psrc);12     return _Dst;13 }

     

  • memicmp(比较指定字符串前n个字符串)
    1 int mymemicmp(const void *_Buf1, const void *_Buf2, size_t _Size) 2 { 3     //保存变量 4     char *buf1 = _Buf1; 5     char *buf2 = _Buf2; 6  7     //结束标识 8     char *end = buf1 + _Size; 9 10     while ((*buf1 == *buf2) && buf1 != end)11     {12         buf1++;13         buf2++;14     }15 16     if (buf1 == end)17     {18         return 0;19     }20     else21     {22         return *buf1 - *buf2 > 0 ? 1 : -1;23     }24 }

     

  • memchr(寻找一个字符串中是否有指定字符)
    1 void *mymemchr(void *start, char ch, int maxlength) 2 { 3     char *p = NULL; 4     for (int i = 0; i < maxlength; i++) 5     { 6         if (((char *)start)[i] == ch) 7         { 8             p = (char *)start + i; 9             break;10         }11     }12     return p;13 }

     

  • memccpy(复制n个字符,遇到指定值退出)
    1 void * mymemccpy(void * _Dst, const void *_Src, int _Val,size_t _MaxCount) 2 { 3     char *dst = _Dst; 4     char *src = _Src; 5  6     for (int i = 0; i < _MaxCount; i++) 7     { 8         dst[i] = src[i]; 9         if (dst[i] == _Val)10         {11             break;12         }13     }14 }

     

转载于:https://www.cnblogs.com/xiaochi/p/8352081.html

你可能感兴趣的文章
ubuntu nginx+php环境520错误
查看>>
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
查看>>
windows 10 无法使用内置管理员账户打开应用的解决方案
查看>>
php入门变量
查看>>
wince(2.3)获取位图某一点的RGB值
查看>>
【转】C#中如何实现左截取和右截取字符串
查看>>
SQL Server 中关于EXCEPT和INTERSECT的使用方法
查看>>
csdn肿么了,这两天写的博文都是待审核
查看>>
windows下cocos2dx3.0开发环境及Android编译环境搭建
查看>>
BW连接数据库
查看>>
登录之后更新导航
查看>>
spring 的单例模式
查看>>
Python学习手册
查看>>
完整的系统帮助类Utils
查看>>
使用PowerShell批量注册DLL到GAC
查看>>
递归算法
查看>>
ubuntu 17.04 添加用户到sudo组
查看>>
Differences between page and segment
查看>>
Jdk与Tomcat配置与安装
查看>>
关于一个Java web与JFrame的深度结合
查看>>