常用CRT字符串函数源码
来源:互联网 发布:淘宝天猫返利是真的吗 编辑:程序博客网 时间:2024/04/25 21:47
////////////////////memcpy/////////////////////////void * __cdecl memcpy ( void * dst, const void * src, size_t count ){ void * ret = dst; while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return(ret);}/////////////////////memset/////////////////void * __cdecl memset ( void *dst, int val, size_t count ){ void *start = dst; while (count--) { *(char *)dst = (char)val; dst = (char *)dst + 1; } return(start);}///////////////////////strcat//////////////////char * __cdecl 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 */}///////////////////////strcpy//////////////////////char * __cdecl strcpy(char * dst, const char * src){ char * cp = dst; while( *cp++ = *src++ ) ; /* Copy src over dst */ return( dst );}/////////////////////////strchr////////////////////////////char * __cdecl strchr ( const char * string, int ch ){ while (*string && *string != (char)ch) string++; if (*string == (char)ch) return((char *)string); return(NULL);}///////////////////////strcmp//////////////////////////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 );}///////////////////////strlen/////////////////////////size_t __cdecl strlen ( const char * str ){ const char *eos = str; while( *eos++ ) ; return( (int)(eos - str - 1) );}//////////////////////strncat//////////////////////////char * __cdecl strncat ( char * front, const char * back, size_t count ){ char *start = front; while (*front++) ; front--; while (count--) if (!(*front++ = *back++)) return(start); *front = '\0'; return(start);}/////////////////////////strncmp//////////////////////////int __cdecl strncmp ( const char * first, const char * last, size_t count ){ if (!count) return(0); while (--count && *first && *first == *last) { first++; last++; } return( *(unsigned char *)first - *(unsigned char *)last );}//////////////////////////strncpy/////////////////////////////char * __cdecl strncpy ( char * dest, const char * source, size_t count ){ char *start = dest; while (count && (*dest++ = *source++)) /* copy string */ count--; if (count) /* pad out with zeroes */ while (--count) *dest++ = '\0'; return(start);}////////////////////////////strnset//////////////////////////////char * __cdecl _strnset ( char * string, int val, size_t count ){ char *start = string; while (count-- && *string) *string++ = (char)val; return(start);}///////////////////////////strset//////////////////////char * __cdecl _strset ( char * string, int val ){ char *start = string; while (*string) *string++ = (char)val; return(start);}////////////////////////strrchr///////////////////////char * __cdecl strrchr ( const char * string, int ch ){ char *start = (char *)string; while (*string++) /* find end of string */ ; /* search towards front */ while (--string != start && *string != (char)ch) ; if (*string == (char)ch) /* char found ? */ return( (char *)string ); return(NULL);}//////////////////////////strrev////////////////////////char * __cdecl _strrev ( char * string ){ char *start = string; char *left = string; char ch; while (*string++) /* find end of string */ ; string -= 2; while (left < string) { ch = *left; *left++ = *string; *string-- = ch; } return(start);}////////////////////////////strstr////////////////////////////char * __cdecl strstr ( const char * str1, const char * str2 ){ char *cp = (char *) str1; char *s1, *s2; if ( !*str2 ) return((char *)str1); while (*cp) { s1 = cp; s2 = (char *) str2; while ( *s1 && *s2 && !(*s1-*s2) ) s1++, s2++; if (!*s2) return(cp); cp++; } return(NULL);}