http://blog.csdn.net/u013354805/article/details/50057139


1. ibc(Linux下的ANSI C的函数库)

[cpp]  view plain  copy
  1. char * strcat(char * dest, const char * src)  
  2. {  
  3.         char *tmp = dest;  
  4.   
  5.         while (*dest)  
  6.                 dest++;  
  7.         while ((*dest++ = *src++) != '\0')  
  8.                 ;  
  9.   
  10.         return tmp;  
  11. }  

2. 微软

[cpp]  view plain  copy
  1. char* strcat ( char * dst , const char * src )  
  2. {  
  3.   
  4. char * cp = dst;  
  5.   
  6. while( *cp )  
  7.   
  8. cp++; /* find end of dst */  
  9.   
  10. while( *cp++ = *src++ ) ; /* Copy src to end of dst */  
  11.   
  12. return( dst ); /* return dst */  
  13.   
  14. }  


3. GNU C Library对这个函数的实现如下:

[cpp]  view plain  copy
  1. char *  strcat (char *dest, const char *src)    
  2. {    
  3.   //通过strcpy来实现strcat函数    
  4.   strcpy (dest + strlen (dest), src);    
  5.   return dest;    
  6. }  


4,OpenBSD对这个函数的实现如下:

[cpp]  view plain  copy
  1. char *  strcat(char *s, const char *append)    
  2. {    
  3.        //将s所指向的字符串的首地址保存下来,以便使用    
  4.         char *save = s;    
  5.     
  6.         //将s所指向的字符串的首指针移至串尾处,s指针指向的字符元素为'\0'    
  7.         for (; *s; ++s);    
  8.         
  9.         //将append所指的字符串的元素复制到s所指向的字符串尾部,直至遇到'\0'    
  10.         while ((*s++ = *append++) != '\0');    
  11.             
  12.         //返回追加后的字符串首地址    
  13.         return(save);    
  14. }  


5. 网上实现:

[cpp]  view plain  copy
  1. #include <assert.h>  
  2. char *strcat (char * dst, const char * src)  
  3. {  
  4. assert(NULL != dst && NULL != src);   // 源码里没有断言检测  
  5.     char * cp = dst;  
  6.     while( *cp )  
  7.          cp++;       /* find end of dst */  
  8.     while( *cp++ = *src++ ) ;       /* Copy src to end of dst */  
  9.     return( dst );                  /* return dst */  
  10. }  

写成下面这样或许好理解一点。

[cpp]  view plain  copy
  1. char *strcat (char * dst, const char * src)  
  2. {  
  3. assert(NULL != dst && NULL != src);   // 源码里没有断言检测  
  4.     char * cp = dst;  
  5.     while'\0' != *cp )  
  6.          cp++;       /* find end of dst */  
  7.     while'\0' != (*cp++ = *src++) ) ;       /* Copy src to end of dst */  
  8.     return( dst );                  /* return dst */  
  9. }  




0
0





Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐