加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c标准库函数实现源码

(2012-10-26 20:56:36)
标签:

c

stdlib

库函数

it

分类: C/C_plus_plus
很多偏底层的公司为了考察你对基础知识的掌握程度,以及编程知识是否过硬,会经常出一些要你实现C标准库函数中的代码,当然是限定你时间完成,而且还要考虑各种非法情况,即你要考虑周全,我承认在压力情况下,我的思路很容易受阻,而且一紧张经常容易漏掉一些东西,之前面过一家WS微电子公司,结果程序是写出来了,但是不完美,结果被BS了,所以现在把各个基础的库函数的实现贴出来,方便记忆也为了了解实际我们在使用某个库函数时,其内部工作机制吧。
1)字符串拷贝
  1. char strcpy( char *strDest, const char *strSrc      
  2.     
  3.     if(strDest == strSrc) return strDest;  
  4.     assert( (strDest != NULL) && (strSrc != NULL) );     
  5.     char *address strDest;      
  6.     while(*strDest++ strSrc++) != '/0' );      
  7.     return address;     
  8. }
  1. //字串末尾要加结束符'/0',不然输出错位结果  
  2. char *strncpy(char *strDes, const char *strSrc, unsigned int count)      
  3.      
  4.     assert(strDes != NULL && strSrc != NULL);      
  5.     char *address strDes;      
  6.     while (count-- && *strSrc != '/0'     
  7.         *strDes++ *strSrc++;   
  8.     *strDes '/0' 
  9.     return address;      
  10. }
2)字符串比较
  1. int strcmp(const char *s, const char *t)   
  2.   
  3.     assert(s != NULL && != NULL);   
  4.     while (*s && *t && *s == *t)   
  5.       
  6.         ++ s;   
  7.         ++ t;   
  8.       
  9.     return (*s *t);   
  10. }

  11. int strncmp(const char *s, const char *t, unsigned int count)   
  12.       assert((s != NULL) && (t != NULL));   
  13.     while (*s && *t && *s == *t && count --)   
  14.               ++ s;           ++ t;         
  15.     return (*s *t);   
  16.   
3)字符串连接
  1. char *strcat(char *strDes, const char *strSrc)   
  2.   
  3.     assert((strDes != NULL) && (strSrc != NULL));   
  4.     char *address strDes;   
  5.     while (*strDes != '/0'  
  6.         ++ strDes;   
  7.     while ((*strDes ++ *strSrc ++) != '/0'  
  8.         NULL;   
  9.     return address;   
  10. }
  1. char *strncat(char *strDes, const char *strSrc, unsigned int count)   
  2.   
  3.     assert((strDes != NULL) && (strSrc != NULL));   
  4.     char *address strDes;   
  5.     while (*strDes != '/0'  
  6.         ++ strDes;   
  7.     while (count -- && *strSrc != '/0'   
  8.         *strDes ++ *strSrc ++;   
  9.     *strDes '/0'  
  10.     return address;   
  11. }   
4)字符串长度
  1. int strlen(const char *str)   
  2.   
  3.     assert(str != NULL);   
  4.     int len 0;   
  5.     while (*str ++ != '/0'  
  6.         ++ len;   
  7.     return len;   
  8. }
5)字符串匹配
  1. char *strstr(const char *strSrc, const char *str)   
  2.   
  3.     assert(strSrc != NULL && str != NULL);   
  4.     const char *s strSrc;   
  5.     const char *t str;   
  6.     for (; *strSrc != '/0'++ strSrc)   
  7.       
  8.         for (s strSrc, str; *t != '/0' && *s == *t; ++s, ++t)   
  9.             NULL;   
  10.         if (*t == '/0'  
  11.             return (char *) strSrc;   
  12.       
  13.     return NULL;   
  14. }
6)内存块复制
  1. void *memcpy(void *dest, const void *src, unsigned int count)   
  2.   
  3.     assert((dest != NULL) && (src != NULL));   
  4.     void *address dest;   
  5.     while (count --)   
  6.       
  7.         *(char *) dest *(char *) src;   
  8.         dest (char *) dest 1;   
  9.         src (char *) src 1;   
  10.       
  11.     return address;   
  12. }
7)内存块赋值初始化
  1. void *memset(void *str, int c, unsigned int count)   
  2.   
  3.     assert(str != NULL);   
  4.     void *s str;   
  5.     while (count --)   
  6.       
  7.         *(char *) (charc;   
  8.         (char *) 1;   
  9.       
  10.     return str;   
  11. }  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有