C++的程序问题,求解释?

凡用过C语言标准库函数strcpy(char*s1,char*s2)的程序员都知道使用该函数时有一个安全隐患,即当指针s1所指向的空间不能容纳字符串s2的内容时,将发生内... 凡用过C语言标准库函数strcpy(char*s1,char*s2)的程序员都知道使用该函数时有一个安全隐患,即当指针s1所指向的空间不能容纳字符串s2的内容时,将发生内存错误。类String的Strcpy成员函数能进行简单的动态内存管理,其内存管理策略为:
(1)若已有空间能容纳下新字符串,则直接进行字符串拷贝;
(2)若已有空间不够时,它将重新申请一块内存空间(能容纳下新字符串),并将新字符串内容拷贝到新申请的空间中,释放原字符空间。
在源程序文件proj2.cpp 中定义了类String和用于测试该类的主函数main,并且成员函数Strcpy的部分实现代码已在该文件中给出,请在标有注释"//**********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;
buf = new char[size];
*buf = '\0';
}

void String::Strcpy(char *s)
{
char *p,*q;
int len = strlen(s);
if (len+1 > size) {
size = len+1;
p = q = new char[size];
//**********found**********
while(______*(q++)=*(s++)_____________); // TODO: 添加代码将字符串s拷贝到字符指针q中
delete [] buf;
buf = p;
}
else {
//**********found**********
for(p=buf;_____ *p=*s ____________;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;
}
展开
 我来答
匿名用户
2014-12-20
展开全部
while((*(q++)=*(s++))!='\0');
for(p=buf; (*p=*s) != '\0' ;p++,s++);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式