标准接口: size_t strlen(const char *src);
size_t mystrlen(const char *src)
{
assert(src != NULL);
int len = 0;
while (*str++ != '\0')
++len;
return len;
}
标准接口: char* strcat(char *dst, const char *src);
char* mystrcat(char *dst, const char *src)
{
assert(dst != NULL && src != NULL);
char *pTemp = dst;
while (*pTemp != '\0')
++pTemp;
while ((*pTemp++ = *src++) != '\0')
;
return dst;
}
标准接口: char* strncat(char *dst, const char *src, size_t n);
char* mystrncat(char *dst, const char *src, size_t n)
{
assert(dst != NULL && src != NULL);
int i = 0;
char *cp = dst;
while (*cp++)
;
cp--;
while (i++ < n)
{
if ((*cp++ = *src++) == '\0')
{
return dst;
}
}
*cp = '\0';
return dst;
}
标准接口: char* strcpy(char *dst, const char *src);
char* mystrcpy(char *dst, const char *src)
{
assert(dst != NULL && src != NULL);
char *cp = dst;
while ((*cp++ = *src++) != '\0')
;
return dst;
}
标准接口: char* strncpy(char *dst, const char *src, size_t n);
char* mystrncpy(char *dst, const char *src, size_t count)
{
assert(dst != NULL && src != NULL);
char *cp = dst;
while (count-- > 0 && (*cp++ = *src++))
;
if (count == 0)
*cp = '\0';
reutn dst;
}
标准接口: int strcmp(const char *str1, const char *str2);
int mystrcmp(const char *str1, const char *str2)
{
assert(str1 != NULL && str2 != NULL);
char *cp1 = str1;
char *cp2 = str2;
while (*cp1 && *cp2 && (*cp1 == *cp2))
{
cp1++;
cp2++;
}
return (*cp1 - *cp2);
}
标准接口: void* memset(void *ptr, int value, size_t n);
void* memset(void *ptr, int value, size_t n)
{
assert(ptr != NULL);
char *cp = ptr;
while (n-- > 0)
*cp++ = (char)value;
return ptr;
}
标准接口: void* memcpy(void *dst, const void *src, size_t n);
void* mymemcpy1(void *dst, const void *src, size_t n)
{
assert(dst != NULL && src != NULL);
char *pdst = dst;
char *psrc = src;
while (n-- > 0)
*pdst++ = *psrc++;
return dst;
}
// If copying takes place between objects that overlap, the behavior is undefined
void* mymemcpy2(void *dst, const void *src, size_t n)
{
assert(dst != NULL && src != NULL);
char *pdst = dst;
char *psrc = src;
if (psrc < pdst && (pdst < (psrc+n))) // 自后向前copy
{
pdst += (n-1);
psrc += (n-1);
while (n-- > 0)
*pdst-- = *psrc--;
}
else
{
while (n-- > 0)
*pdst++ = *psrc++;
}
return dst;
}