连接两个字符串,怎么不行呢?

CExp001 2006-08-26 01:51:43
连接两个字符串,为什么输出是"This is ",arr2没连接上呢?帮我改一下吧。
#include<iostream>
using namespace std;

int main()
{
char arr1[]="This is ";
char arr2[]="a string!";
cout<<"arr1="<<arr1<<endl;
cout<<"arr2="<<arr2<<endl;
char *p1=arr1, *p2=arr2;
int m=sizeof(arr1)-1;//arr1存储的字符数
int n=sizeof(arr2)-1;//arr2存储的字符数
char *p3=new char[m+n+1];
int i=0;
for(i=0; i!=m+1; ++i)
{
*(p3+i)=*(p1+i);
}
for(i=m+1; i!=m+n+1; ++i)
{
*(p3+i)=*(p2+i-m-1);
}
cout<<"连接后为:"<<p3;
delete []p3;

return 0;
}
...全文
174 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CExp001 2006-08-28
  • 打赏
  • 举报
回复
谢谢!
dreamcs 2006-08-27
  • 打赏
  • 举报
回复
得加上*(p3+m+n-1)='\0';
不然会有乱码
Heaven_Redsky 2006-08-26
  • 打赏
  • 举报
回复
在输出之前设断点观察一下
就会发现问题所在
rollor_phoe 2006-08-26
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;

int main()
{
char arr1[]="This is ";
char arr2[]="a string!";
cout<<"arr1="<<arr1<<endl;
cout<<"arr2="<<arr2<<endl;
char *p1=arr1, *p2=arr2;
int m=sizeof(arr1)-1;//arr1存储的字符数
int n=sizeof(arr2)-1;//arr2存储的字符数
char *p3=new char[m+n+1];
int i=0;
for(i=0; i!=m+1; ++i)//改成for(i=0; i!=m; ++i) 因为数组的下标是从0到m-1
{
*(p3+i)=*(p1+i);
}
for(i=m+1; i!=m+n+1; ++i)//改成for(i=m; i!=m+n; ++i) 下标为m到m+n-1
{
*(p3+i)=*(p2+i-m-1);
}
cout<<"连接后为:"<<p3;
delete []p3;

return 0;
}
jixingzhong 2006-08-26
  • 打赏
  • 举报
回复
连接的时候,
第一个字符串的末尾终结符号必须被舍弃的 ...
jixingzhong 2006-08-26
  • 打赏
  • 举报
回复
...

\0 也被连接上了,
那么输出的就还是第一个字符串 ...
Dong 2006-08-26
  • 打赏
  • 举报
回复
for(i=0; i!=m+1; ++i)
{
*(p3+i)=*(p1+i);
}
for(i=m+1; i!=m+n+1; ++i)
{
*(p3+i)=*(p2+i-m-1);
}
------------------------------
改成:
for(i=0; i<m; ++i)
//这里有个'\0'被写入,输出的时候遇到'\0'就结束了
{
*(p3+i)=*(p1+i);
}
for(i=m; i<m+n; ++i)
{
*(p3+i)=*(p2+i-m);
}
w5r2g0 2006-08-26
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;

int main()
{
char arr1[]="This is ";
char arr2[]="a string!";
cout<<"arr1="<<arr1<<endl;
cout<<"arr2="<<arr2<<endl;
char *p1=arr1, *p2=arr2;
int m=sizeof(arr1)-1;//arr1存储的字符数
int n=sizeof(arr2)-1;//arr2存储的字符数
char *p3=new char[m+n+1];
int i=0;
for(i=0; i!=m; ++i)
{
*(p3+i)=*(p1+i);
}
for(i=m; i!=m+n+1; ++i)
{
*(p3+i)=*(p2+i-m);
}
cout<<"连接后为:"<<p3;
delete []p3;

return 0;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧