c++自己写一个函数将两个字符数组相加

要求自己写一个函数使两个字符串相加,但我无论怎么弄都是只输出abc,为什么,错误出来哪里?求救#include<iostream>usingnamespacestd;ch... 要求自己写一个函数使两个字符串相加,但我无论怎么弄都是只输出abc,为什么,错误出来哪里?求救
#include <iostream>
using namespace std;
char* add_str(char* a,char* b)
{
int i,j,k;
int num1=(sizeof (a)/sizeof (a[0]));
int num2=(sizeof (b)/sizeof (b[0]));
int num =num1+num2+1;
char *p=new char [num];
for (i=0;i<num1;i++)
{
p[i]=a[i];
}
for (i=0;i<num2;i++)
{
p[i+num1]=b[i];
}
p[num-1]='\0';
return p ;

}

int main()
{
char a[]={'a','b','c'};
char b[]={'c','d'};
char *p_a=a;
char *p_b=b;
char * p_c =add_str(p_a,p_b);
cout<<p_c;
return 0 ;
}
展开
 我来答
czy7812
2018-11-08 · TA获得超过2670个赞
知道小有建树答主
回答量:518
采纳率:88%
帮助的人:190万
展开全部

错误的原因在于你函数的参数使用的是字符指针:char* add_str(char* a,char* b)。这样子的话,当你传一个数组名称或字符指针作为参数的时候,你在里面用下面两句来测数组长度:

int num1=(sizeof (a)/sizeof (a[0]));

int num2=(sizeof (b)/sizeof (b[0]));

不管你传的a数组和b数组有几个元素,测出来的永远是指针类型的大小,而不是数组的大小。所以会出错。

所以,你应该用strlen函数来测a和b字符串的大小。使用这个函数记得在程序的最开头加头文件:#include<string.h>

【程序代码】
#include<iostream>                  //加载控制台头文件
#include<string.h>                  //加载字符串操作头文件
using namespace std;
char* add_str(char *a,char *b)      //合并函数,没毛病
{int i;                             //循环变量只需一个
 int num1=strlen(a);                //测a字符串长度
 int num2=strlen(b);                //测b字符串长度
 int num=num1+num2+1;               //计算出新串的长度
 char *p=new char[num];             //开辟一个新串
 for(i=0;i<num1;i++) p[i]=a[i];     //把a串拷到新串中
 for(i=0;i<num2;i++) p[i+num1]=b[i];//把b串接到a串后
 p[num-1]='\0';                     //为新串做上结束标记
 return p;}                         //返回新串地址
int main()                          //主函数
{char a[]="abcdef",                 //a串
      b[]="ghi",                    //b串
      *p=add_str(a,b);              //数组名本身就是地址,可以直接用数组名作参数
 cout<<p<<endl;                     //输出p字符串
 printf("\n");                      //输出换行符
 system("PAUSE");                   //屏幕暂停,以看清运行结果
 return 0;}                         //程序结束
 
 /*如果不想用已有的函数测长度,应该用i=0;while(a[i++]);num1=--i;这样手动测长度*/

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式