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 ;
} 展开
#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 ;
} 展开
1个回答
展开全部
错误的原因在于你函数的参数使用的是字符指针: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;这样手动测长度*/
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询