⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.c

📁 Rabbit 32Bit RTOS源代码
💻 C
字号:
/*********************************************************************
*文 件 名:string.c
*描    述:字符串操作函数
*          该文件的代码来自uClinux\uClibc\libc\string.c
*          我只是调整风格,使它们符合自己的风格,尽管它们的风格很好!
*当前版本:V1.00
*作    者:
*创建日期:2012.01.20
**********************************************************************/
#include <lib\string.h>

/*********************************************************************
*函 数 名:strlen
*描    述:获得字符串长度
*输入参数:str:字符串首指针
*输出参数:无
*返 回 值:字符串长度
*注    意:
**********************************************************************/
unsigned int strlen(const char *str)
{
    register char *ptr = (char *) str;

    while (*ptr)
    {
        ptr++;
    }

    return (ptr - str);
}

/*********************************************************************
*函 数 名:strcat
*描    述:将src的字符串粘贴到dst字符串末尾
*输入参数:src:源字符串
*输出参数:dst:目的字符串
*返 回 值:dst
*注    意:
**********************************************************************/
char *strcat(char *dst, const char *src)
{
    register char *ptr = dst; 

    while (*ptr)
    {
        ptr++;
    }

    while (*src)
    {
        *ptr++ = *src++;
    }

    *ptr = '\0';

    return dst;
}

/*********************************************************************
*函 数 名:strcpy
*描    述:字符串拷贝,将src字符串拷贝到dst
*输入参数:src:源字符串
*输出参数:dst:目的字符串
*返 回 值:dst字符串首址
*注    意:
**********************************************************************/
char *strcpy(char *dst, const char *src)
{
    register char *ptr = dst;

    while (*src)
    {
        *dst++ = *src++;
    }

    *dst = '\0';

    return ptr;
}

/*********************************************************************
*函 数 名:strcmp
*描    述:字符串比较
*输入参数:s1: 字符串1指针
*          s2: 字符串2指针
*输出参数:无
*返 回 值:第一个不相同的字符数值差,若两个字符串相同返回0
*注    意:
**********************************************************************/
int strcmp(const char *s1, const char *s2)
{
    unsigned register char c1, c2;

    do
    {
        c1 = (unsigned char) *s1++;
        c2 = (unsigned char) *s2++;
        if (c1 == '\0')
        {
            return (c1 - c2);
        }
    }
    while (c1 == c2);

    return (c1 - c2);
}

/*********************************************************************
*函 数 名:memcpy
*描    述:内存拷贝
*输入参数:src:源地址
*          len:拷贝内存字节数
*输出参数:dst: 目的地址
*返 回 值:目的内存首址dst
*注    意:
**********************************************************************/
void *memcpy(void *dst, const void *src, unsigned int len)
{
    register char *a = dst;
    register const char *b = src;

    while (len--)
    {
        *a++ = *b++;
    }

    return dst;
}

/*********************************************************************
*函 数 名:memset
*描    述:将一块字符内存设置成指定的数值
*输入参数:c: 指定值
*          len:内存长度
*输出参数:str:内存首址
*返 回 值:内存首址
*注    意:
**********************************************************************/
void *memset(void *str, int c, unsigned int len)
{
    register char *a = str;

    while (len--)
    {
        *a++ = c;
    }

    return str;
}

/*********************************************************************
*函 数 名:memmove
*描    述:内存块移动
*输入参数:src:源内存块
*          len:内存块长度(字节)
*输出参数:dst: 目的内存
*返 回 值:目的内存首址dst
*注    意:
**********************************************************************/
void *memmove(void *dst, const void *src, unsigned int len)
{
    register char *s1 = dst, *s2 = (char *) src;

    /* This bit of sneakyness c/o Glibc, it assumes the test is unsigned */
    if ((s1 - s2) >= len)
    {
        return memcpy(dst, src, len);
    }

    /* This reverse copy only used if we absolutly have to */
    s1 += len;
    s2 += len;
    while (len-- > 0)
    {
        *(--s1) = *(--s2);
    }

    return dst;
}

/*********************************************************************
*函 数 名:memcmp
*描    述:内存块内容比较
*输入参数:s1: 内存块1首址
*          s2: 内存块2首址
*          len: 比较长度
*输出参数:无
*返 回 值:第一个不相同的字节单元数值差,
*          若两个内存块在len长度内相同返回0
*注    意:
**********************************************************************/
int memcmp(const void *s1, const void *s2, unsigned int len)
{
    unsigned char *c1 = (unsigned char *)s1;
    unsigned char *c2 = (unsigned char *)s2;

    while (len--)
    {
        if (*c1 != *c2)
        {
            return (*c1 - *c2);
        }
        c1++;
        c2++;
    }

    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -