常用CRT字符串函数源码

Table of Contents
    ////////////////////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);
    
    }