strcpy、strcmp、strcat、strlen、strstr,memset

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; 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值