【发布时间】:2020-06-30 23:19:46
【问题描述】:
他,我需要一些帮助,因为我无法弄清楚它在输出中显示什么奇怪的数字
我是说。例如 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;
}
【问题讨论】:
-
为什么
j是静态的? -
您没有为
'\0'或'+'分配空间。char* napis = new char[st.len + st2.len + 2]; -
另外,您
delete st.str然后尝试将字符串复制到其中。在复制到新字符串之前,您需要为新字符串重新分配空间:st.str = new char[strlen(napis) + 1]; -
delete应该是delete[]这里。在deleteing 之后,您正在使用st.str立即。你可能打算在那里写st.str = napis。 -
@JohnnyMopp 他们已经分配了一个新数组,它是
napis。st.str = napis就是他们的意思。