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;