首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

1、两个小弟我看都一样的程序,但编译时一个通过,另一个出错,大家帮看看。2、通过的程序执行时,提示访问违例(段错误)

2013-12-07 
1、两个我看都一样的程序,但编译时一个通过,另一个出错,大家帮看看。2、通过的程序执行时,提示访问违例(段异

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个字符的空间,然后拷贝值。

热点排行