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怎么连接到它后面了

c++

5个回答

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

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

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

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

qq_38204686
das白 回复a954539881: 明确几个概念 数组 数组的首地址 数组的结束符 ‘\0’ 指针 以及其用法
2 年多之前 回复
qq_38204686
das白 回复a954539881: str1只是数组的起始 起始并没有变 真的你单步调试一下 或者在纸上自己算算 别老想 得动手
2 年多之前 回复
a954539881
a954539881 str1没有改变啊?函数返回值返回str1怎么变成了两个字符串的内容了.
2 年多之前 回复

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;

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐