C标准库string.h源码(简单版)
- strcpy/strncpy
- strcat/strncat
- strcmp/strncmp
- strchr/strrchr/strchrnul/strstr
- memcpy/memmove
strcpy/strncpy
char * strcpy (char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ != '\0')
;
return( dst );
}
char * strncpy (char *dest, const char *source, unsigned count)
{
char *start = dest;
while (count && (*dest++ = *source++ != '\0'))
count--;
if (count)
while (--count)
*dest++ = '\0';
return(start);
}
strcat/strncat
char * strcat (char * dst, const char * src)
{
char * cp = dst;
while( *cp )
++cp;
while( *cp++ = *src++ )
;
return( dst );
}
char *strncat (char *front, const char *back, unsigned count)
{
char *start = front;
while (*front++)
;
front--;
while (count--)
if ((*front++ = *back++) == '\0')
return(start);
*front = '\0';
return(start);
strcmp/strncmp
int strcmp ( const char *s1, const char *s2)
{
for(;(*s1 == *s2) && (*s1 != '\0');s1++,s2++)
;
return *s1-*s2;
}
int strncmp(const char *s1, const char *s2, size_t n)
{
for(;(*s1 != '\0') && (count > 0) && (*s1 == *s2);s1++,s2++,count--)
;
if(count == 0)
return 0;
else
return *s1 - *s2;
}
strchr/strrchr/strchrnul/strstr
char *strchr(const char *s, int c);
返回一个字符指针,它指向c在s中首次出现的位置,如果未找到,返回NULL
char *strrchr(const char *s, int c);
返回一个字符指针,它指向c在s中最后出现的位置,如果未找到,返回NULL
char *strchrnul(const char *s, int c);
若c在s中,同strchr,否则返回指向字符串末尾的‘\0’的指针,而不是NULL
char *strstr(const char *str, const char *sub);
查找子串strstr:在字符串str中查找子串sub,若找到,则指针返回sub第一次出现在str中的位置,否则返回NULL
char *strchr (const char *string, int chr)
{
while (*string && *string != chr)
string++;
if (*string == chr)
return(string);
return((char *)0);
}
char *strrchr (const char *string, int ch)
{
char *start = string;
while (*string++)
;
while (--string != start && *string != ch)
;
if (*string == ch)
return(string);
return(NULL);
}
char *strchrnul (const char *string, int chr)
{
while (*string && *string != chr)
string++;
return(string);
}
char * strstr (const char * str1,const char * str2)
{
char *cp = (char *) str1;
char *s1, *s2;
if ( *str2 == '\0' )
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && (*s1 == *s2) )
s1++, s2++;
if (*s2 == '\0')
return(cp);
cp++;
}
return(NULL);
}
memcpy/memmove
void* memcpy(void* memTo, void* memFrom, size_t size)
{
assert(memTo != NULL && memFrom != NULL);
char* temFrom = (char*)memFrom;
char* temTo = (char*)memTo;
while(size-- > 0)
*temTo++ = *temFrom++;
return memTo;
}
参考:https://blog.csdn.net/c1204611687/category_6985722.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)