C++字符串拼接函数stringcat

#include <iostream>
using namespace std;
char * stringcat(const char *s1,const char *s2);
void main(){
	char *c;
	const char *a = "i love ",*b="you";
	c=stringcat(a,b);
	cout<<c<<endl;
	delete [] c;
}


char * stringcat(const char *s1,const char *s2){
char*p,*p0;//p用于存储拼接后的字符串,p0备用
p=new char[strlen(s1)+strlen(s2)+1];//使用new为p申请恰好的堆空间
if(p==NULL){//检测是否申请空间成功
	cout<<"Out of space!"<<endl;
}
p0=p;//让P0指向P
while(*s1){//s1中的元素不为'\0'时继续遍历
	*p++=*s1++;//将p的元素用s1元素挨个填充
}
while(*s2){
	*p++=*s2++;
}
*p='\0';//尾部加上结束符 
return p0;//返回p0
}


疑难点1:*p++=*s1++

*p的首地址首先被s1的首地址赋值,然后 *p++就是走向p的下一个元素的地址,*s1++同理,然后继续赋值,直到s1到结束符 

疑难点2:return p0

p0指向p的首地址,所以p0的内容和p是一样的,但是p最后指向了结束符,所以返回p就是返回结束符,最后会溢出!

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值