字符串函数
strlen函数
我们知道,字符串以'\0'作为结束标志,strlen函数返回的是在此之前出现的字符个数,同时,易错点在于strlen函数返回值是size_t,注意与int的区分。
以下是三种模拟实现方法
//第一种
int my_strlen(const char* str)
{
int count=0;
assert(str);
while(*str)
{
count++;
str++;
}
return count;
}
//第二种
int my_strlen(const char* str)
{
assert(str);
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
//第三种
int my_strlen(const char* str)
{
assert(str);
char* p = s;
while(*p)
p++;
return p-s;
}
strcpy函数
此函数的功能是将第二个变量拷贝到第一个目标空间中去,要保证目标空间足够大,且能够修改,即不能是常量字符串,以下是模拟实现strcat函数
char *my_strcpy(char *dest,const char *src)
{
char *p=dest;
assert(dest);
assert(src);
while(*dest++=*src++)
{
;
}
return (p);
}
strcat函数
此函数的功能是将第二个变量追加到第一个目标空间之后,形成一个新的字符串,基本规则与strcpy相差不大,以下是模拟实现
char *my_strcat(char *dest,const char *src)
{
char *p= dest;
assert(dest);
assert(src);
while(*dest)
{
dest++;
}
while((*dest++=*src++))
{
;
}
return ret;
}
strcmp函数
此函数用于比较两个字符串之间的大小,若前者大于后者,返回大于0数字,若相等,则返回0,若小于,返回小于0的数字。
int my_strcmp(const char* str1,const char* str2)
{
int ret=0;
asseert(str1);
assert(str2);
while(*str1==*str2)
{
if(*str1=='\0')
return 0;
str1++;
str2++;
}
return *str1-*str2;
}
内存函数
memcpy函数
void *memcpy(char* dest,char *src,size_t num),从src位置开始向后复制num个字节的数据到dest指向的内存位置,在遇到\0时不会停下。
void* my_memcpy(void* dest, const void* src, size_t count)
{
void* p = dest;
assert(dest);
assert(src);
while (count--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return (p);
}
memmove函数
此函数用于处理目标内存块和源内存块重叠的情况,使得重叠时也能够进行处理。
void* my_memmove(void* dest, const void* src, size_t count)
{
void* p = dest;
if (dest <= src || (char*)dest >= ((char*)src + count))
{
while (count--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
else
{
dest = (char*)dest + count-1;
src = (char*)src + count-1;
while (count--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest - 1;
src = (char*)src - 1;
}
}
return (p);
}
到此结束,感谢阅读。