1. strcat函数实现
char *strcat(char *dest, const char*src)
{
assert((dest!=NULL)&&(src!=NULL));
char *address = dest;
while(*dest)//此处不可以用while(*dest++),由于需要dest指向'\0'位置,如果*dest++作为循环条件,dest执行'\0'后面的字节
{
dest++;
}
while(*dest++=*src++);//这里只需要将src内容拷贝到dest,不需要管最后dest和src指针指向'\0'后的一位
return address;
}
2. strcpy函数实现
char *strcpy(char *dest, const char *src)
{
assert((dest!=NULL)&&(src!=NULL));
char *address = dest;
while (*dest++=*src++);//这里可以保证将src的'\0'拷贝给dest
return address;
}
3. strcmp函数实现
int strcmp(const char *dest, const char *src)
{
assert((dest!=NULL)&&(src!=NULL));
while (*dest&&*src&&*dest==*src)//这里绝对不能用*dest++=*src++,因为最后dest和src指针指向不相等到后一个字节
{
dest++;
src++;
}
return *dest-*src;
}
4. strlen函数实现
size_t strlen(const char *dest)
{
assert(dest != NULL);
size_t len = 0;
while(*dest++)//这里可以用*dest++作为循环条件,因为不用dest指针
{
len++;
}
return len;
}
5. memcpy函数实现
void *memcpy(void*dest, const void *src, size_t len)
{
assert((dest!=NULL)&&(src!=NULL));
void*address = dest;
while (len--)
{
*(char*)dest = *(char*)src;
dest++;
src++;
}
return address;
}
优化的memcpy
void *_memcpy(void *dest, const void *src, size_t n)
{
void *ret = dest;
while (n/sizeof(long) > 0) {
*(long*)dest = *(long*)src;
n -= sizeof(long);
dest = (long*)dest + 1;
src = (long*)src + 1;
}
while (n-->0) {
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}