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

重载+号合并 2 个字符串问题

ctl184762651 发布于 2014-11-27 23:25, 548 次点击
程序代码:
String& operator+(const String &st1, const String &st2)
{
    String result;
    result.str = new char[st1.length() + st2.length() + 1];
    std::strcat(result.str, st1.str);
    std::strcat(result.str, st2.str);

    return result;
}

为什么会无限出错,我已经试过好几种方法了,再比如.我也重载了=号<<和>>,只要一运行到s1=s2+s3这样的合并列就会出错
程序代码:
String& operator+(const String &st1, const String &st2)
{
    char *temp=new char[st1.len+st2.len+1];
   
    strcat(temp, st1.str);
    strcat(temp, st2.str);
        String result(temp);
    return result;
}
4 回复
#2
rjsp2014-11-28 08:38
String&(应该是String,不可能返回一个引用的) operator+(const String &st1, const String &st2)
{
    String result;
    result.str = new char[st1.length() + st2.length() + 1];
    std::strcat(应该是strcpy吧)(result.str, st1.str);
    std::strcat(result.str, st2.str);

    return result;
}

“为什么会无限出错” ------ 没代码,我瞎猜一下,猜你class String的拷贝构造函数的参数不是引用。

看你的第二段代码,有new[],却无delete[],估计你这个class String代码一团糟,下次全贴出来吧
#3
ctl1847626512014-11-28 16:10
回复 楼主 ctl184762651
其实就是第一个strcat换成strcpy就好了,可是这里为什么不能用strcat,分配过内存空间但是未初始化的字符串不能用strcat吗
#4
qwe8851677592014-11-30 08:33
你的返回值和返回类型不匹配吧,你改成string试试
其它的问题,我赞成楼上
#5
stop12042014-11-30 23:44
函数原型:
char *strcat(char *destin, char *source);
需要两个字符串指针 (或字符数组)
1