面试:C/C++常见库函数实现

论坛 期权论坛 期权     
C语言与C++编程   2019-6-16 21:53   1461   0
作者: wxquare
链接:https://www.cnblogs.com/wxquare/p/5014445.html
[h2]1、void *mymemcpy(void *dest, const void* src, size_t n);[/h2]
内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
  1. void* memcpy(void* dest,void* src,size_t n){
  2.     assert(dest != NULL && src != NULL);
  3.     if(src < dest && (char*)src + n > dest){
  4.         char* pdst = (char*)dest+n-1;
  5.         char* psrc = (char*)src+n-1;
  6.         while(n--){
  7.             *pdst-- = *psrc--;
  8.         }
  9.     }else{
  10.         char* pdest = (char*)dest;
  11.         char* psrc = (char*)src;
  12.         while(n--){
  13.             *pdest++ = *psrc++;
  14.         }
  15.     }
  16.     return dest;
  17. }
复制代码
[h2][/h2][h2]2、void *memset(void *s, int c, size_t n);[/h2]
  1. void* memset(void* src,int c,size_t n){
  2.     assert(src != NULL);
  3.     char* psrc = (char*)src;
  4.     while(n--){
  5.         *psrc++ = (char)c;
  6.     }
  7.     return src;
  8. }
复制代码
[h2][/h2][h2]3、char* strcpy(char* dest,const char* src);[/h2]
  1. char* strcpy(char* dest,const char* src){
  2.     assert(dest != NULL && src != NULL);
  3.     size_t n = strlen(src);
  4.     if(src < dest && src + n > dest){
  5.         char* pdst = dest + n;
  6.         *pdst-- = '\0';
  7.         src = src + n - 1;
  8.         while(n--){
  9.             *pdst-- = *src--;
  10.         }
  11.     }else{
  12.         char* pdst = dest;
  13.         while((*pdst++ = *src++) != 0);
  14.     }
  15.     return dest;
  16. }
复制代码

4、char* mystrncpy(char* dest,char* src,size_t n);
  1. char* strncpy(char* dest,const char* src,size_t n){
  2.     assert(dest != NULL && src != NULL);
  3.     if(src < dest && src + n > dest){
  4.         int m = strlen(src) < n ? strlen(src):n;
  5.         char* pdst = dest+m;
  6.         *pdst-- = '\0';
  7.         src = src + m-1;
  8.         while(m--){
  9.             *pdst-- = *src--;
  10.         }
  11.     }else{
  12.         char* pdst = dest;
  13.         size_t i = 0;
  14.         while(i++ < n && (*pdst++ = *src++) != '\0');
  15.         if(*(pdst-1) != '\0') *pdst = '\0';
  16.     }
  17.     return dest;
  18. }
复制代码
[h2][/h2][h2]5、char* strcat(char* dest,const char* src)[/h2]
  1. char* strcat(char* dest,const char* src){
  2.     assert(dest != NULL && src != NULL);
  3.     char* pdst = dest;
  4.     while(*pdst != '\0'){
  5.         pdst++;
  6.     }
  7.     while((*pdst++ = *src++) != '\0');
  8.     return dest;
  9. }
复制代码
[h2][/h2][h2]6、int strcmp(const char* s1,const char* s2)[/h2]
  1. int strcmp(const char* s1,const char* s2){
  2.     assert(s1 != NULL && s2 != NULL);
  3.     while(s1 && s2 && *s1 == *s2){
  4.         s1++;
  5.         s2++;
  6.     }
  7.     return *s1 - *s2;
  8. }
复制代码
[h2][/h2][h2]7、size_t strlen(const char* s)[/h2]
  1. size_t strlen(const char* src){
  2.     assert(src != NULL);
  3.     size_t ret = 0;
  4.     while(*src++ != '\0'){
  5.         ret++;
  6.     }
  7.     return ret;
  8. }
复制代码
●编号465,输入编号直达本文

●输入m获取文章目录
C语言与C++编程
分享C/C++技术文章
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:200
帖子:40
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP