1,libc(Linux下的ANSI C的函数库)
char * strcat(char * dest, const char * src){ char *tmp = dest; while (*dest) dest++; while ((*dest++ = *src++) != '\0') ; return tmp;}
2,微软
char* strcat ( char * dst , const char * src ){char * cp = dst;while( *cp )cp++; /* find end of dst */while( *cp++ = *src++ ) ; /* Copy src to end of dst */return( dst ); /* return dst */}
3,GNU C Library对这个函数的实现如下:
char * strcat (char *dest, const char *src) { //通过strcpy来实现strcat函数 strcpy (dest + strlen (dest), src); return dest; }
4,OpenBSD对这个函数的实现如下:
char * strcat(char *s, const char *append) { //将s所指向的字符串的首地址保存下来,以便使用 char *save = s; //将s所指向的字符串的首指针移至串尾处,s指针指向的字符元素为'\0' for (; *s; ++s); //将append所指的字符串的元素复制到s所指向的字符串尾部,直至遇到'\0' while ((*s++ = *append++) != '\0'); //返回追加后的字符串首地址 return(save); }
5,我的实现
#includechar *strcat (char * dst, const char * src){assert(NULL != dst && NULL != src); // 源码里没有断言检测 char * cp = dst; while( *cp ) cp++; /* find end of dst */ while( *cp++ = *src++ ) ; /* Copy src to end of dst */ return( dst ); /* return dst */}
写成下面这样或许好理解一点。
char *strcat (char * dst, const char * src){assert(NULL != dst && NULL != src); // 源码里没有断言检测 char * cp = dst; while( '\0' != *cp ) cp++; /* find end of dst */ while( '\0' != (*cp++ = *src++) ) ; /* Copy src to end of dst */ return( dst ); /* return dst */}