【发布时间】:2014-03-22 18:06:30
【问题描述】:
我正在编写自己的 String 类,但 append 函数有问题。它将一个常量 cstring 作为参数,并将其附加到调用它的 String 的末尾。
函数的原型如下:
void append(char *str );
预期工作:
String s1("John");
s1.append(" Doe");
s1.display();
结果应该是:
John Doe
我得到了什么?
John
我在做什么?
-
char * data 是我的 String 类的数据成员。
将 data 的内容复制到 temp。
重新声明 data 的大小等于 temp+CStringToBeAppended+1
现在,将 temp 的内容复制到新的 data 中。
-
将CStringToBeAppended的内容复制到新的data中,从strlen(temp)的位置开始。
这是我目前拥有的功能:
//char * data is the data member of my String class.
void append(char* str)
{
char *temp = new char[strlen(data)+1];
for (int i=0; data[i] != '\0'; i++)
temp[i] = data[i];
len = strlen(temp) + strlen(str);
data = new char [len+1];
for (int i=0; temp[i] != '\0'; i++)
data[i] = temp[i];
for (int i=strlen(temp); str[i] != '\0'; i++)
data[i] = str[i];
delete [] temp;
}
【问题讨论】:
-
展示你是如何为班级中的数据分配内存的?
-
它在那里:len = strlen(temp) + strlen(str);数据 = 新字符 [len+1];
-
您的第一次分配毫无意义。附注:该参数应该是
const char *,而不是char *。 -
为什么是 temp,为什么不分配 strlen(data) + strlen(str) + 1 并将该指针与数据交换,为什么内存泄漏?
-
@WhozCraig:临时指针在函数内部的范围受到限制。你写的是
const char *。