Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 连接对象(C+;+;)_C++_String_Char_Operators - Fatal编程技术网

C++ 连接对象(C+;+;)

C++ 连接对象(C+;+;),c++,string,char,operators,C++,String,Char,Operators,他,我需要一些帮助,因为我不知道它在输出中显示了什么奇怪的数字 我是说。例如,它可以工作name_1+name_2,但我得到了一些额外的字符Anna+Mark&@#$@@ class String { private: char* str; int len; static int num_strings; static const int CINLIM = 80; }; String& operator+(String& st, String&a

他,我需要一些帮助,因为我不知道它在输出中显示了什么奇怪的数字 我是说。例如,它可以工作
name_1+name_2
,但我得到了一些额外的字符Anna+Mark&@#$@@

class String
{
private:
    char* str;
    int len;
    static int num_strings;
    static const int CINLIM = 80;
};

String& operator+(String& st, String& st2)
{
    char* napis = new char[st.len + st2.len]; 

    int i;
    for (i=0; st.str[i] != '\0'; i++)
    {
        napis[i] = st.str[i];
    }
    napis[i] = '+';

    int static j = i+1;
    for (int a = 0; st2.str[a] != '\0'; a++,j++)
    {
        napis[j] = st2.str[a];
    }
    st2.str[j] = '\0';
    for (int i = 0; i < j; i++)
    {
        cout << napis[i] << std::endl;
    }
    delete st.str;
    strcpy(st.str, napis);
    return st;
}
类字符串
{
私人:
char*str;
内伦;
静态int num_字符串;
静态常数int CINLIM=80;
};
字符串和运算符+(字符串和st、字符串和st2)
{
char*napis=新字符[st.len+st2.len];
int i;
对于(i=0;st.str[i]!='\0';i++)
{
napis[i]=st.str[i];
}
napis[i]='+';
int静态j=i+1;
对于(inta=0;st2.str[a]!='\0';a++,j++)
{
napis[j]=st2.str[a];
}
st2.str[j]='\0';
对于(int i=0;i您的代码中可能存在多个或多个问题,但主要问题是:

int static j = i+1;
静态函数变量只初始化一次(第一次)。我想这不是您实际需要的,这一定是额外字符的原因(您只需使用上一次调用函数时的
j
值,并且该值始终增长)。您不需要将变量设置为静态变量

还有一些问题: 为什么不使用std::string? 即使您正在学习C风格的字符串管理,您也肯定需要在CTOR中管理分配/解除分配。
考虑在你的问题的评论中报告的其他问题。< /p>为什么<代码> j <代码>静态?你不为<代码> \ 0′<代码>或“<代码> +”>代码>分配空间。<代码> char *NAPIS=新char [ST.LeN+ST2.LeN+2 ]
另外,您
删除st.str
然后尝试将一个字符串复制到其中。在复制到新字符串之前,您需要重新分配新字符串的空间:
st.str=new char[strlen(napis)+1];
删除
应该是
delete[]
在这里。你在
删除它之后立即使用
st.str
。你可能想在那里写
st.str=napis
。@Johnnymapp他们已经分配了一个新数组,这就是
napis
st.str=napis