问答题凡是使用过C语言标准库函数strcpy(char*s1,char*s2)的程序员都知道,使用该函数时有一个安全隐患,即当指针s1所指向的空间不能容纳字符串s2的内容时,将发生内存错误。类Stung的Strcpy成员函数能进行简单的动态内存管理,其内存管理策略为:①若已有空间能容纳新字符串,则直接进行字符串复制;②若已有空间不够时,将重新申请一块内存空间(能容纳下新字符串),并将新字符串内容复制到新申请的空间中,释放原字符串空间。
请使用VC6或使用[答题]菜单打开考生文件夹proj2下的工程proj2,此工程中含有一个源程序文件proj2.cpp。其中定义了类String和用于测试该类的主函数main,且成员函数Strepy的部分实现代码也已在该文件中给出,请在标有注释“//TODO:”的行中添加适当的代码,将这个函数补充完整,以实现其功能。
注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
// proj2.cpp
#include <iostream>
using namespace std;
class String {
private:
int size; //缓冲区大小
char * buf; //缓冲
public:
String(int bufsize);
void Strcpy(char * s); //将字符串
s复制到buf中
void Print() const;
~String()
{ if (buf != NULL) delete [] buf; }
};
String::String (int bufsize)
{
size = bufsize;
bur = new char[size];
* buf = ’\0’;
}
void String::Strcpy (char * s)
{
char * p,* q;
int fen = strlen(s);
if (len+1 > size) { //缓冲区空间不够,须安排更大空间
size = len+1;
p = q = new char[ size];
//********** found**********
while((* q=* s) !=0) {______}
//TODO: 添加代码将字符串s复制到字符指针q中
delete [] buf;
buf = p;
}
else {
//**********found**********
for(p=buf; ______; p++, s++);
//TODO: 添加代码将字符串s复制到buf中
}
}
void String::Print() const
{
cout << size << ’\t’ << buf <<endl;
}
int main ()
{
char s[100];
String str (32);
cin.getline(s, 99);
str.Strcpy(s);
str.Print ();
return 0;
}