#include<iostream>
using std::cout;
using std::endl;
char *scat(char *s1,char *s2)
{
char *s=new char[strlen(s1)+strlen(s2)+1];
strcpy(s,s1);
strcat(s,s2);
return s;//返回刚申请的堆空间的首址,出了函数后变量s就不复存在了,但申请的空间仍在
//这很危险,容易造成内存泄露,因为有的人认为在函数中为局部变量申请的堆空间,出了函数后
//会自动释放,这是不正确的
}
void main()
{
char str1[]="hello";
char str2[]="Jim";
char *str3=scat(str1,str2);
cout<<str3<<endl;
str3[0]='x';
cout<<str3<<endl;
delete [] str3;//释放堆空间
}
结果:helloJim
xelloJim
地址返回可以为int类型
#include<iostream>
using std::cout;
using std::endl;
int scat(char *s1,char *s2)
{
char *s=NULL;
s=new char[strlen(s1)+strlen(s2)+1];
strcpy(s,s1);
strcat(s,s2);
return (int )s;//返回刚申请的堆空间的首址,出了函数后变量s就不复存在了,但申请的空间仍在
//这很危险,容易造成内存泄露,因为有的人认为在函数中为局部变量申请的堆空间,出了函数后
//会自动释放,这是不正确的
}
void main()
{
char str1[]="hello";
char str2[]="Jim";
char *str3=(char *)scat(str1,str2);
cout<<str3<<endl;
str3[0]='x';
cout<<str3<<endl;
delete [] str3;//释放堆空间
}
结果:helloJim
xelloJim
3、
#include<iostream>
using std::cout;
using std::endl;
int scat(char **s1,char **s2)
{
char *s=NULL;
s=new char[strlen(*s1)+strlen(*s2)+1];
strcpy(s,*s1);
strcat(s,*s2);
return (int )s;
}
void main()
{
char *str1="hello";
char *str2="Jim";
char *a="x";
char *str3=(char *)scat(&str1,&str2);
cout<<str3<<endl;
str3[0]='x';
cout<<str3<<endl;
delete [] str3;//释放堆空间
}