#include<iostream>
#include<string.h>
using namespace std;
void str_add(char *a,char *b)
{
int i,j,k,m,n;
char *c=new char [strlen(a)+strlen(b)+1];
for(i=0;a[i]!='\0';i++)
c[i]=a[i];
if(a[i]=='\0')
m=i;
for(j=0,k=m;b[j]!='\0';j++,k++)
c[m]=b[j];
for(i=0;i<(strlen(a)+strlen(b)+1);i++)
cout<<c[i];
}
void main()
{
char *p="sfdag";
char *q="abc";
str_add(p,q);
}
这个问题出在你将原来第二个字符串复制到新字符串中的时候,
for(j=0,k=m;b[j]!='\0';j++,k++)这句话,变量是j和k,但在c串中你却用m表示下标,应该是k。改成
for(j=0,k=m;b[j]!='\0';j++,k++)还有最后输出的时候,你虽然把a串和b串的内容全部放在了c串,但是没有字符串结束的‘\0’标志,所以应该在c串末尾添加字符串结束标志。
然后输出的话就非常容易了。
将
for(i=0;i<(strlen(a)+strlen(b)+1);i++)改成
c[k] = '\0';最后整体程序为:
#include<iostream>结果为: