1,strncpy实现
按照man strncpy官方实现版本
char *strncpy(char *dest, const char *src, size_t n)
{
size_t i;
for (i = 0; i < n && src[i] != '\0'; i++)
dest[i] = src[i];
for ( ; i < n; i++)
dest[i] = '\0';
return dest;
}
一般别人实现
char *strncpy(char *dest, const char *src, int n)
{
char *ret = dest;
assert(dest);
assert(src);
while(n && (*dest++ = *src++) != '\0')
n--;
*dest = '\0';
return ret;
}
2, strncat实现
官方版本
char * strncat(char *dest, const char *src, size_t n)
{
size_t dest_len = strlen(dest);
size_t i;
for (i = 0 ; i < n && src[i] != '\0' ; i++)
dest[dest_len + i] = src[i];
dest[dest_len + i] = '\0';
return dest;
}
别人实现版本
char *mystrncat(char *dest, const char *src, int n)
{
char *ret = dest;
assert(dest);
assert(src);
while (*dest != '\0')
{
dest++;
}
while (n && (*dest++ = *src++) != '\0')
{
n--;
}
dest = '\0';
return ret;
}
3, strncmp实现
int mystrcmp(const char *str1, const char *str2, int n)
{
assert(n);
while(--n && *str1 && *str1 == *str2)
{
str1++;
str2++;
}
return *str1 - *str2;
}
4, strrchr实现
char *mystrrchr(const char *s, int c)
{
assert(s);
int i = 0;
char *ch = NULL;
char *start = (char *)s;
while(*s != '\0')
s++;
for(; start != --s; )
{
if(*s == c)
{
return (char *)s;
}
}
return NULL;
}
方便一点的
char *mystrrchr2(const char *s, int c)
{
assert(s);
int i = 0;
char *start = (char *)s;
while(*s != '\0')
s++;
while(--s != start && *s != c)
;
if( *s == c)
return (char *)s;
return NULL;
}