注册 登录
编程论坛 C++教室

简单的题却是问题多多!

lixang 发布于 2007-03-10 18:02, 454 次点击
#include<iostream>
using namespace std;
char* mystrcat( char *s, const char*d )//连接两个字符串
{
char*p=s;
while (*p) p++;
do { *p=*d; p++; d++;}
while(*d);
return s;
}
void main()
{
char a[]="ab";char b[]="cd";
char* c=NULL;
c=mystrcat(a,b);
cout<<c<<endl;
}//编译无任何错误与警告;
程序输出为abcd烫烫?
还望高手指点;
如何调试成输出为abcd而不是abcd烫烫?
7 回复
#2
anthony6342007-03-10 18:58

char* mystrcat( char *s, const char*d )//连接两个字符串
{
char*p=s;
while (*p) p++;
do { *p=*d; p++; d++;}
while(*d);

*p='\0';//你自己编译看下行不行
return s;
}


运气好的话应该不会有意外, a的空间好像装不下abcd吧,如果a后面的紧接着东西的话会不会被你吃了

[此贴子已经被作者于2007-3-10 19:30:58编辑过]

#3
boyyang48942007-03-10 22:17
#include<iostream>
using namespace std;
char* mystrcat( char *s, const char*d )//连接两个字符串
{
char*p=s;
while (*p) p++;
do { *p=*d; p++; d++;}
while(*d);
*p='\0';//加上该句就可以了;
return s;
}
int main()
{
char a[]="ab";char b[]="cd";
char* c=NULL;
c=mystrcat(a,b);
cout<<c<<endl;
system("pause");
return 0;
}
#4
清水香里2007-03-10 22:22

加 *p='\0'可以通过。。

#5
dlcdavid2007-03-10 23:21
array a的长度不够,,为什么不出错?/
#6
csight2007-03-11 00:47
我觉得在main()中应该就用new来分配a的大小;
再在mystrcat()中判断s和d的大小,delete s,再分配s和d的总长的大小;
最后再在main()中delete c;
这样就不会出现数组越界了;
像lz这样的写法不好;
其实用string更好实现;
建议使用; 
#7
琥珀之风2007-03-11 10:18
那个用STL里面的string……岂不更好
#8
lehmann2007-03-11 18:53
改一点
把char a[]="ab";
改为char a[10]="ab";
这里是定义数组长度问题
1