1.strcpy
功能:strcpy把从sorc地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。
char *my_strcpy(char *dest, const char *sorc)
{
assert(dest && sorc);
char *ret = dest;
while (*dest++ == *sorc)
{
;
}
return ret;
}
2.strcat
功能:把字符串sorc连接到字符串dest后面。
char *my_strcat(char *dest, const char *sorc)
{
assert(dest && sorc);
char *ret = dest;
while (*dest++)
{
;
}
dest--;
while (*dest++ == *sorc++)
{
;
}
return ret;
}
3.strchr
功能:查找字符串string中首次出现字符ch的位置
char *my_strchr(const char *string, char ch)
{
assert(string);
char *p = (char *)string;
while (*p)
{
if (ch == *p)
{
return p;
}
else
{
p++;
}
}
return NULL;
}
4.strstr
功能:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
char *my_strstr(const char *str1, const char *str2)
{
assert(str1 && str2);
char *dest = (char *)str1;
char *sorc = (char *)str2;
char *s = NULL;
while (*dest)
{
s = dest;
sorc = (char *)str2;
while (*s == *sorc && *s && *sorc)
{
s++;
sorc++;
}
if (!*sorc)
{
return dest;
}
else
{
dest++;
}
}
return NULL;
}
5.strcmp
功能:比较两个字符串大小(按ASCII值大小逐个字符相比较),设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1 < str2,则返回负数;
若str1 > str2,则返回正数。
int my_strcmp(const char *str1, const char *str2)
{
assert(str1 && str2);
int ret = 0;
while (!(ret = *(unsigned char *)str1 - *(unsigned char *)str2) && *str1 && *str2)
{
str1++;
str2++;
}
if (ret > 0)
{
return 1;
}
else if (ret < 0)
{
return -1;
}
return ret;
}
6.memcpy
功能:从源sorc所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
void *my_memcpy(void *dest, const void *sorc, size_t n)
{
assert(dest && sorc);
void *ret = dest;
while (n--)
{
*(char *)dest = *(char *)sorc;
dest = (char *)dest + 1;
sorc = (char *)sorc + 1;
}
return ret;
}
7.memmove
功能:从sorc拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后sorc内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
void *my_memmove(void *dest, const void *sorc, size_t count)
{
assert(dest && sorc);
void *ret = dest;
if (dest <= sorc || (char *)dest >= (char *)sorc + count) //low to high
{
while (count--)
{
*(char *)dest = *(char *)sorc;
dest = (char *)dest + 1;
sorc = (char *)sorc + 1;
}
}
else //high to low
{
(char *)dest = (char *)dest + count - 1;
(char *)sorc = (char *)sorc + count - 1;
while (count--)
{
*(char *)dest = *(char *)sorc;
dest = (char *)dest - 1;
sorc = (char *)sorc - 1;
}
}
return ret;
}