我的strcat:
1 char *strcat(char *dest,char *src) 2 { 3 char * reval = dest; 4 while(*dest) 5 dest++; 6 while(*src) 7 *dest++ = *src++ ; 8 *dest = *src; 9 return reval; 10 }
MSVC:
1 char * __cdecl strcat ( 2 char * dst, 3 const char * src 4 ) 5 { 6 char * cp = dst; 7 8 while( *cp ) 9 cp++; /* find end of dst */ 10 11 while( *cp++ = *src++ ) ; /* Copy src to end of dst */ 12 13 return( dst ); /* return dst */ 14 15 }
在while( *cp++ = *src++ )中,条件的值为赋值语句的返回值即*cp被赋的值,也就是此时*src的值。则,当*src为0时,将其赋给*cp后完成赋值。非常简洁。
该函数的前提条件:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
我的strncat:
1 char *strncat(char *dest,char *src,int n) 2 { 3 char * reval = dest; 4 while(*dest) 5 dest++; 6 while(n-- && (*dest++ = *src++)); 7 if(n < 0) 8 *dest = 0; 9 return reval; 10 }
MSVC:
1 char * __cdecl strncat ( 2 char * front, 3 const char * back, 4 size_t count 5 ) 6 { 7 char *start = front; 8 9 while (*front++) 10 ; 11 front--; 12 13 while (count--) 14 if (!(*front++ = *back++)) 15 return(start); 16 17 *front = '