内核中的str函数

来源:互联网 发布:杭州开创网络 编辑:程序博客网 时间:2024/06/06 03:37

代码选自uboot_tiny4412/lib
1、 strcmp

#ifdef _HAVE_ARCH_STRCMPint strcmp(const char *cs,const char *ct){    register signed char _res;    while(1)    {        if((_res = *cs - *ct++) != 0 || !cs++)        break;          }    return _res;}#endif

2、 strncmp

#ifndef _HAVE_ARCH_STRNCMPint strcnmp(const char *cs,const char *ct,size_t count){    register signed char _res = 0;    while(count)    {        if((_res = *cs - *ct++) != 0)|| !*cs++)        break;        count--;    }    return _res;}#endif

3、 strcat

#idndef _HAVE_ARCH_STRCATchar *strcat(char *dest,const char *src){    char *tmp = dest;    while(*dest)        dest++;    while((*dest++ = *src++) != '\0');    return tmp;}#endif

4、 strncat

#ifndef _HAVE_ARCH_STRNCATchar *strncat(char *dest,const char *src,size_t count){    char *tmp = dest;    if(count)    {        while(*dest)            dest++;        while(*dest++ = *src++)        {            if(--count == 0)            {                *dest = '\0';                break;              }        }    }    return tmp;}#endif

5、 strcpy

#ifdef _HAVE_ARCH_STRCPYchar *strcpy(char *dest,const char *src){    char *tmp = dest;    while((*dest++ = *src++)!= '\0')        /*nothing*/return tmp;}#endif

6、 strncpy

#ifndef _HAVE_ARCH_STRNCPYchar *strcnpy(char *dest,const char *src,size_t count){    char *tmp = dest;    while(count-- &&(*dest++ = *src++) != '\0')    /*nothing*/    return tmp;}#endif

7、 strspn

#ifndef _HAVE_ARCH_STRSPNsize_t strspn(const char* s,const char *accept){    const char *p;    const char *a;    size_t count = 0;    for(p = s;*p != '\0';++p)    {        for(a = accept;*a != '\0';++a)        {            if(*p == *a)            break;        }        if(*a == '\0')        return count;        ++count;    }    return count;}#endif

8、 strpbrk

#ifndef _HAVE_ARCH_STRPBRKchar *strpbrk(const char *cs,const char *ct){    const char *sc1,*sc2;    for(sc1 = cs;*sc1 != '\0';++sc1)    {        for(sc2 = ct;*sc2 != '\0';++sc2)        {            if(*sc1 == *sc2)                return(char *) sc1;        }    }    return NULL;}#endif

9、 strtok

#ifndef _HAVE_ARCH_STRTOKchar *strtok(char *s,const char *ct){    char *sbegin,*send;    sbegin = s ? s:_strtok;    if(!sbegin)    {        return NULL;    }    sbegin += strspn(sbegin,ct);    if(*sbegin == '\0')    {        _strtok = NULL;        return(NULL);    }    send = strpbrk(sbegin,ct);    if(send && *send != '\0')        *send++ = '\0';    _strtok = send;    return (sbegin);}endif
原创粉丝点击