//strcpy
char* mystrcpy(char * dst, const char *src)
{
assert((dst != NULL) && (src != NULL));
char *retAddr = dst;
while((*(dst++) = *(src++)) != '\0');
return retAddr;
}
//strncpy
char * mystrncpy(char *dst, char *src, size_t size)
{
assert((dst != NULL) && (src != NULL));
int i = 0;
char *retAddr = dst;
//while((*(dst++) = *(src++)) && ((++i) < size));//注意++i,不是i++
while(((i++) < size) && (*(dst++) = *(src++)));//注意i++,不是++i
return retAddr;
}
//strlen
int mystrlen(const char* str)
{
assert(str!=NULL);
int len = 0;
while(*str != '\0')
{
str++;
len++;
}
return len;
}
//strcat
char * mystrcat(char *dst, char *src)
{
assert(src != NULL);
char *retAddr = dst;
while(*dst != '\0')
{
dst++;
}
while(*src != '\0')
{
*dst++ = *src++;
}
++dst = '\0';
return retAddr;
}
//strchr
char * mystrchr(char *str, char c)
{
assert(str != NULL);
char* retAddr = str;
while(*retAddr != '\0')
{
if (*retAddr == c)
{
return retAddr;
}
retAddr++;
}
return NULL;
}
//strcmp
int mystrcmp(char *str1, char *str2)
{
assert((str1 != NULL) && (str2 != NULL));
while((*str1 == *str2) && (*str1 != '\0') && (*str2 != '\0'))
{
str1++;
str2++;
}
return *str1 - *str2;
}
//strncmp
int mystrncmp(char *str1, char *str2, size_t size)
{
assert((str1!=NULL) && (str2!=NULL));
while((*str1 == *str2) && (*str1 != '\0') && (*str2 != '\0'))
{
str1++;
str2++;
}
return *str1 - *str2;
}
//strstr
char * mystrstr(char* dst, char* src)
{
//条件判断特殊情况
int idst = 0, isrc = 0, idstTemp = 0, isrcTemp = 0;
while (dst[idst] != '\0')
{
idstTemp = idst;
isrcTemp = 0;
while (src[isrcTemp] == dst[idstTemp])
{
idstTemp++;
isrcTemp++;
}
if (src[isrcTemp] == '\0')
{
return dst+idst;
}
idst++;
}
return dst;
}
//memset
void * mymemset(void *buffer, int ch, size_t size)
{
assert(buffer != NULL);
char *retAddr = (char*)buffer;
while (size-- > 0)
{
*(retAddr++) = (char)ch;
}
return retAddr;
}