strcat源代码汇总

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值