1.strcat函数功能实现
char* mystrcat(char* dest, const char* src)
{
assert(dest);
assert(src);
char* ret = dest;
//找到目标空间里面的斜杠0的位置,再追加
while (*dest != '\0')
{
dest++;
}
while ((*dest++ = *src++))
{
;
}
return ret;
}
int main()
{
char arr1[20] = "hello";
char arr2[] = "world";
mystrcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
(1)这个函数的作用就是实现字符串的追加,把一个加到另外一个上面;
(2)这个函数的返回值是目标处的地址,因为这个过程指针在移动变化,所以我们在最开始的时
候就定义指针变量ret记录初始时候的位置,最后返回ret;
(3)第一个循环就是一直到找到斜杠0才停止;
第二个循环就是让指针后移,并且在移动的同时,实现对应位置的赋值;
(4)当移动到斜杠0的时候,就会因为斜杠0等于斜杠0的赋值,是的表达式的结果是0,循环结束;
(5)这个函数不能自己拼接自己,因为如果自己拼接的话,这种情况下2个指针指向的位置是相同
的,dest向右移动的时候,src也向右移动,但是src指针永远不会找到斜杠0进行终止循环,因为斜
杠0已经被覆盖掉了,超出范围以后会造成程序的崩溃;这里不能实现的主要症结就是2个指针指向
同一位置;
2.strcmp函数功能实现
(1)第一个字符串大,返回大于0的数;
(2)第二个字符串大,返回小于0的数;
(3)2个字符串相等,返回0;
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
int ret = 0;
assert(str1 != NULL);
assert(str2 != NULL);
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return *str1 - *str2;
}
int main()
{
char arr1[20] = "abcdef";
char arr2[20] = "acdef";
int ret = my_strcmp(arr1, arr2);
printf("%d\n", ret);
return 0;
}
这里返回指针相减,也就是相差字符的个数,是符合条件的。