C++中两个字符串放到一块,怎么只出现一部分字符,后面是乱码。

#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++)
    c[m]=b[j];

这句话,变量是j和k,但在c串中你却用m表示下标,应该是k。改成

for(j=0,k=m;b[j]!='\0';j++,k++)
    c[k]=b[j];


还有最后输出的时候,你虽然把a串和b串的内容全部放在了c串,但是没有字符串结束的‘\0’标志,所以应该在c串末尾添加字符串结束标志。

然后输出的话就非常容易了。

for(i=0;i<(strlen(a)+strlen(b)+1);i++)
    cout<<c[i];

改成

c[k] = '\0';
cout << c << endl;

最后整体程序为:

#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[k] = b[j];
    c[k] = '\0';
    cout << c << endl;
}
void main()

    char *p="sfdag"; 
    char *q="abc";  
    str_add(p,q);
}

结果为:

温馨提示:答案为网友推荐,仅供参考
相似回答