strcat的头文件是<string.h>这个函数的含义是字符串追加,是在原字符串后面追加上一段字符串。举个例子
int main()
{
char* p1 = "abcdef";
char p2[20]="abcd";
strcat(p2, p1);
printf("%s", p2);
return 0;
}
这段代码的意思就是在p2的后面追加上p1的内容,我们实际运行一下
得到的结果和预想的一样。
下面就让我们来模拟实现一下这样一个函数:
首先为了使这个函数具备链接属性,我们让它返回类型为char*表示追加之后的字符串首元素地址,然后函数参数应该包括一个源和目的地,即是我们想要对其追加内容的字符串和追加的内容,这两个参数类型都应该是char*类型。并且源的内容我们不希望会发生改变,所以可以用const修饰。
char* my_strcat(char* des, const char* source)
{
}
接下来我们要想我们不能传进来空指针吧,如果目的地是空指针,那我们追加到哪里去呢,如果源是空指针,那我们追加什么呢,所以我们进入函数内部,先对其进行断言,断言记得添加头文件<assert.h>。
char* my_strcat(char* des, const char* source)
{
assert(des!=NULL&&source!=NULL);
}
断言之后因为我们最后是要返回目的地地址,所以先创建一个临时变量来接受目的地以方便后期作为返回值返回。
char* my_strcat(char* des, const char* source)
{
assert(des!=NULL&&source!=NULL);
char* ret = des;
}
接下来我们需要找到目的地字符串的结束标志,也就是'\0',我们写一个循环来让des往后走到'\0'处停下来即可。
char* my_strcat(char* des, const char* source)
{
assert(des!=NULL&&source!=NULL);
char* ret = des;
while(*des)
des++;
}
这样des就是目的地'\0'处的地值了,接下来只需要一直把源的字符拷贝到目的地就可以了
char* my_strcat(char* des, const char* source)
{
assert(des!=NULL&&source!=NULL);
char* ret = des;
while(*des)
des++;
while(*des++=*source++)
;
}
完成拷贝之后我们把目的地地址返回回去就可以完成了。
char* my_strcat(char* des, const char* source)
{
assert(des!=NULL&&source!=NULL);
char* ret = des;
while(*des)
des++;
while(*des++=*source++)
;
return ret;
}
我们可以测试一下
int main()
{
char* p1 = "abcdef";
char p2[20]="abcd";
my_strcat(p2, p1);
printf("%s", p2);
return 0;
}
达成目标。