读书人

1、两个小弟我看都一样的程序但编译

发布时间: 2013-12-07 22:19:20 作者: rapoo

1、两个我看都一样的程序,但编译时一个通过,另一个出错,大家帮看看。2、通过的程序执行时,提示访问违例(段异常)
本帖最后由 wolfyc2004 于 2013-12-06 11:55:19 编辑
这个程序是将两个字串合并,可能是我的语法问题,刚学C++,请指教详细点(不用字串合并函数)。谢谢!
#include<iostream>
#include<cstring>
using namespace std;
char *append(char *s1,char *s2)
{
int len1=strlen(s1);
int len2=strlen(s2);
int j=0;
for (int i=len1-1;i<len1+len2;i++)
{
*(s1+i)=*(s2+j);
j++;
}
return s1;
}
int main()
{
char *s,*s1,*s2;
s1="this is ";
s2="a string.";
s=append(s1,s2);
cout<<s<<endl;
system("pause");
}
[解决办法]
很明显是s1的空间不够
[解决办法]

引用:
Quote: 引用:

代码修改了如下:
#include<iostream>
#include<cstring>
using namespace std;
char *append(char *s1,char *s2)
{
int len1=strlen(s1);
int len2=strlen(s2);
int j=0;
char *s=new char[len1+len2+1];
s=s1;
for (int i=len1;i<len1+len2+1;i++)
{
*(s+i)=*(s2+j);
j++;
}
cout<<j<<" "<<len1<<"---"<<len2<<"---"<<"---"<<sizeof(s)<<"---"<<s; return s;
delete [] s;
}
int main()
{
char *s1,*s2,*s;
s1="adf";
s2="gj";
s=append(s1,s2);
cout<<s<<endl;
system("pause");
}
但还是访问违例,还有为啥sizeof(s)空间是4,char *s=new char[len1+len2+1];这条语句不是定义指针s并分配len1+len2+1个存储空间?

s=s1;这行应该用strcpy(s,s1);因为是字符串型的,不是string。

补充说明:s=s1;实际是s指向了s1指向的地址。而不是你想的申请了len1+len2+1个字符的空间,然后拷贝值。

读书人网 >C++

热点推荐