今天我通过查找资料找到了
strlen、strcat、strcpy、strcmp源码的源码,可能对大家有帮助,所以我就贴出来。这样对一些需要的人可能方便些。
code:strcmp源码 windows
int __cdecl strcmp (const char *src, const char *dst)
{
int ret = 0 ;
while(!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
{
++src;
++dst;
}
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret );
}
Linux下的源码
int strcmp( const char *src, const char *dst ) {
char *p = src;
char *q = dst;
while ( *p++ == *q++ ) {
if ( *p == 0 ) {
return 0;
}
}
return *p - *q;
}
code:strlen源码
size_t strlen_a(const char *str) {
size_t length = 0;
while (*str++)
++length;
return length;
}
也许可以稍加改进如下:
size_t strlen_b(const char *str) {
const char *cp = str;
while (*cp++)
;
return (cp - str - 1);
}
code:strcat源码 Linux
char * strcat(char * dest, const char * src)
{
char *tmp = dest;
while (*dest)
dest++;
while ((*dest++ = *src++) != '\0')
;
return tmp;
}
windows
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 */
}
code:strcpy
char* strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */
return( dst );
}