c语言strcpy的s1里有字符串,凡是使用过C语言标准库函数strcpy(char*s1,char*s2)的程..._考试资料网...

问答题凡是使用过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;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值