C++简单题目,有悬赏!

c++ 写出了strcat和strlen函数,再输出拼接的字符串和其长度
cout<<strcat(p1,p2)<<strlen(strcat(p1,p2));错在哪里?

我编了一个strcat函数和strlen函数,大概是这样void str_cat(char*p1,char*p2)和int str_len(char*p),一个显示void不能用cout输出,一个是int类型不能变为char类型。
还有一个str_cmp(char*p1,*p2)函数怎么输出其结果。
就是void str_cat(char*p1,char*p2);
int str_len(char*p)
int str_cmp(char*p1,*p2)
int main()
{
cout<<str_cmp(p1,p2);
cout<<strcat(p1,p2)<<strlen(strcat(p1,p2));
}这些输出哪里出错了,谢谢!另外C++ primer plus有介绍这几个函数的知识点吗?在多少页?

参考一下strcat的源代码,希望对你有帮助
char* strcat(char* strDest , const char* strSrc)
{
//后文return address,故不能放在assert断言之后声明address
char* address=strDest;
assert( (strDest!=NULL)&&(strSrc!=NULL) );//对源地址和目的地址加非0断言
while(*strDest)//是while(*strDest!=’\0’)的简化形式
{
//若使用while(*strDest++),则会出错,因为循环结束后strDest还会执行一次++,
//那么strDest将指向'\0'的下一个位置。/所以要在循环体内++;因为要使*strDest最后指
//向该字符串的结束标志’\0’。
strDest++;
}

while(*strDest++=*strSrc++)
{
    NULL;//该循环条件内可以用++,
}//此处可以加语句*strDest=’\0’;无必要
return address;//为了实现链式操作,将目的地址返回

}

比较完了,指针地址变动了吧

str_cat不能返回void,要改成

 char *str_cat(char*p1,char*p2)