strcpy函数的实现
- 不考虑内存重叠
//这种实现如果遇到内存重叠就会出错,如mystrcpy(Src+1,Src);'\0'由于被覆盖导致出现死循环
char* strcpy(char* dst, const char* src)
{
assert(dst);
assert(src);
char* ret = dst;
while((*dst++ = *src++) != '\0');
return ret;
}
- 考虑内存重叠
char* strcpy(char* dst, const char* src)
{
assert((dst != NULL) && (src != NULL));
char* ret = dst;
int size = strlen(src) + 1;
if(dst > src && dst < src + len)
{
dst = dst + size - 1;
src = src + size - 1;
while(size--)
{
*dst-- = *src--;
}
}
else
{
while(size--)
{
*dst++ = *src++;
}
}
return ret;
}
memcpy函数的实现
void* memcpy(void* dst, void* src, size_t size)
{
if(dst == NULL || src == NULL)
{
return NULL;
}
void* res = dst;
char* pdst = (char*)dst;
char* psrc = (char*)src;
if(pdst > Psrc && pdst < psrc + size)//有重叠
{
pdst += size - 1;
psrc += size - 1;
while(size--)
*pdst-- = *psrc--;
}else//无重叠
{
while(size--)
{
*pdst++ = *psrc++;
}
}
return res;
}
strcat函数的实现
char* strcat(char* dst, const char* src)
{
char* res = dst;
while(*dst != '/0')
dst++;
while((*dst++ = *src++) != '/0');
return res;
}
strcmp函数实现
int strcmp(const char* str1, const char* str2)
{
while(*str1 == *str2 && *str1 != '\0')
{
str1++;
str2++;
}
return *str1 - *str2;
}