您的位置:首页 > 其它

 strcpy、strcmp、strcat、strlen、strstr,memset

2013-08-18 00:30 369 查看
C语言字符串函数

[cpp] view plaincopyprint?

strcpy的源代码: 

strcpy的源代码:

 

char *strcpy(char *des, const char *src) 



    assert(des != NULL && src != NULL); 

    char *pStr = des; 

    while( (*des++ = *src++) != '\0') 

        NULL; 

    return pStr; 



 

 

 

 

strcmp的源码: 

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 );

}

}

http://blog.csdn.net/peterpan19890802/article/details/5459569

 //为什么要转unsigned char 类型呢?那是因为大于127的数如果是signed类型要转为负数  那就不行了。如a=129  那么实际等于-126   b=6 那么a<b了实际上却是a>b所以要装为unsigned,因为ascii码是0-----255之间都有可能。

 

 

 

 

strcat的源码: 

strcat的源码:

 

char *strcat(char *des, const char *src) 



    assert(*des != NULL && *src != NULL); 

    char *pStr = des; 

    while (*des != '\0') 

        des++; 

 

    while ((*des++ = *src++) != '\0') 

        NULL; 

    return pStr; 



 

 

[cpp] view plaincopyprint?

strlen的源码: 

strlen的源码:

[cpp] view plaincopyprint?

int strlen(const char *pStr) 



    assert(pStr != NULL); 

    int len = 0; 

    while (*pStr++ != '\0') 

        len++; 

 

    return len; 



 

 memset.c

/*
Public domain.  */
#include <stddef.h>
void *
memset (void *dest, int
val, size_t len)
{
  unsigned char *ptr =
dest;
  while (len-- > 0)
 
  *ptr++ =
val;
  return
dest;
}


 

strstr的源码: 

strstr的源码:

 

char *myStrstr(const char *des, const char *src) 



    assert(des != NULL && src != NULL); 

 

    char *d = des; 

    char *s = src; 

 

    for (; d != '\0'; des++) 

    { 

        for (d = des, s = src; (s != '\0') && (*d == *s); d++, s++) 

            NULL; 

     

    if (*s == '\0') 

        return des; 

    } 

     

    return NULL; 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐