C++ 用函数实现功能:字符串连接

#include
using namespace std;
char *my_strcat(char *str1,char *str2)
{
char *p = str1;
while( *p != '\0' ) {p++;}
*p = *str2;
do
{ str2++;
p++;

*p = *str2; 

} while( *str2 != '\0' );
return( str1 );
}
int main()
{char str1[6],str2[6];
cout<<"input str1"< cin>>str1;
cout<<"input str2"< cin>>str2;
cout<<my_strcat(str1,str2)<<endl;
}

请教下函数为什么能实现那个功能,返回值是str1?str2怎么连接到它后面了

有人能帮忙看看嘛 好像简单的。。。。。

关键就是那俩个循环
建议单步调试
带入值在纸上模拟一下也行
并不难

只是将str1 的结束位用str2覆盖 最后加个结束
返回开始的地方str1

str1没有改变啊?函数返回值返回str1怎么变成了两个字符串的内容了

#include
using namespace std;
char *my_strcat(char *str1, char *str2)
{
// str1="1234\0" str2="qwe\0"
char *p = str1;
while (*p != '\0') { p++; }// 使得p指向str1的'\0'的位置

*p = *str2;// '\0'的值设置为str2字符串的第一个值

do
{
str2++;
p++;
*p = *str2;//逐次往后赋值
} while (*str2 != '\0');
return(str1);//使用指针操作的是地址,这就是为什么返回了所得到的值!
}
int main()
{
char str1[6], str2[6];
cout << "input str1" << endl;
cin >> str1;
cout << "input str2" << endl;
cin >> str2;
cout << my_strcat(str1, str2) << endl;

return 0;

}

while( *p != '\0' ) {p++;}将指针移到str1的结尾,后面的代码将str2的值一个一个保存到str1字符串的后面。这个程序很危险,非法篡改了未知空间,不确定会引起什么崩溃。