首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
凡是使用过C语言标准库函数strcpy(chaur*s1,char*s2)的程序员都知道,使用该函数时有一个安全隐患,即当指针s1所指向的空间不能容纳字符串s2的内容时,将发生内存错误。类String的Strcpy成员函数能进行简单的动态内存管理,其内存管
凡是使用过C语言标准库函数strcpy(chaur*s1,char*s2)的程序员都知道,使用该函数时有一个安全隐患,即当指针s1所指向的空间不能容纳字符串s2的内容时,将发生内存错误。类String的Strcpy成员函数能进行简单的动态内存管理,其内存管
admin
2020-05-14
58
问题
凡是使用过C语言标准库函数strcpy(chaur*s1,char*s2)的程序员都知道,使用该函数时有一个安全隐患,即当指针s1所指向的空间不能容纳字符串s2的内容时,将发生内存错误。类String的Strcpy成员函数能进行简单的动态内存管理,其内存管理策略为:①若已有空间能容纳新字符串,则直接进行字符串复制;②若已有空间不够时,将重新申请一块内存空间(能容纳下新字符串),并将新字符串内容复制到新申请的空间中,释放原字符串空间。
请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,此工程中含有一个源程序文件proj2.epp。
其中定义了类Stung和用于测试该类的主函数mmn,且成员函数Strcpy的部分实现代码也已在该文件中给出,请在标有注释“//TODO:”的行中添加适当的代码,将这个函数补充完整,以实现其功能。
注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
//proj2.cpp
#include
usingnamespacestd;
classString{
private:
intsize;//缓冲区大小
char*buf;//缓冲区
public:
String(intbufsize);
voidStrcpy(char*s);//将字符串
s复制到bur中
voidPrint()const;
~String()
{if(bur!=NULL)delete[]bur;}
};
String::String(intbursize)
{
size=bursize;
bur=newchar[size];
*buf=’\0’;
}
voidString::Strcpy(char*s)
{
char*p*,*q;
intlen=strlen(s);
if(len+1>size){//缓冲区空间不够,须安排更大空间
size=len+1;
p=q=newchar[size];
//**********found**********
while((*q=*s)!=0){________}
//TODO:添加代码将字符串s复制到字符指针q中
delete[]bur;
buf=p;
}
else{
//**********found**********
for(p=bur;________;p++,s++);
//TODO:添加代码将字符串s复制到buf中
}
}
voidString::Print()const
{
cout<
end1;
}
intmain()
{
chars[100];
Stringstr(32);
cin.getline(s,99);
str.Strcpy(s);
str.Print();
return0;
}
选项
答案
(1)++q; ++s; (2)(*p = *s) != 0
解析
(1)主要考查考生对while循环的掌握,先看语句注释:添加代码将字符串s拷贝到字符指针q中。程序已经给出了赋值语句,这里只要使q和s递增即可。
(2)主要考查考生对for循环的掌握,先看语句注释:添加代码将字符串s拷贝到buf中。因为循环体中没有语句,直接用分号结束,因此需要在循环条件中完成赋值,同时进行条件判断,赋值语句为*p=*s,判断条件为当前字符不是字符串结束。
转载请注明原文地址:https://kaotiyun.com/show/Rr8p777K
本试题收录于:
二级C题库NCRE全国计算机二级分类
0
二级C
NCRE全国计算机二级
相关试题推荐
有如下程序#includeusingnamespacestd;intmain(){chara:cin>>a;if(a=*)cout
下列关于函数重载的叙述中,错误的是
下列各类函数中,不是类的成员函数的是
请将下列程序补充完整,使得输出结果为bbaa。#include<iostream>usingnamespacestd;classA{public:______{cout<<"aa";}};
C++语言类体系中,不能被派生类继承的有
下列关于C++函数的叙述中,正确的是()。
结构化程序设计的3种基本结构是()。
设一棵完全二叉树共有700个结点,则在该二叉树中有【】个叶子结点。
若磁盘上已存在某个文本文件,其全路径文件名为d:\ncre\test.txt,下列语句中不能打开该文件的是
使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也
随机试题
下列关于青少年牙周炎的叙述,错误的是
与肝硬化晚期患者的黑便症状有关的循环障碍是
一般投资机会研究分为______。
若需长期保存输入的信息,则以文件的形式存在微机的()中。
单项工程综合概算是以其所包含的()为基础汇总而成的。
按建设用地的用途,可以将建设用地分为()。
在中国的文学园地上,散文犹如一朵奇葩,显示出其独特的魅力,丰富着民族文化。在几千年的文学发展中,留下了许多_________的经典名作,给人们提供了丰富的精神食粮,_________着一代代炎黄子孙,每一篇佳作都是历史的折射.记录着历史的沧桑,我们从中不仅
下列属于课程表安排应遵循的原则的是()。
在金本位货币制度中,各国央行主要关注黄金储备,且很少积极干预金融市场,物价、利率、信贷、财政和贸易平衡基本可以自我调整。各国货币都有自己的含金量的法定基准,几乎不存在汇率波动的问题。在近半个世纪没有大规模战争和革命的情况下,国际贸易空前繁荣,全球资本自由流
(26)操作系统中基本的并行单位、资源分配单位和调度单位。一个(26)通常是(27),进程可分为(28)进程和(29)进程两类。在多进程的系统中,为了保证公共变量的完整性,各进程应互斥进入临界区。所谓临界区是指(30)。
最新回复
(
0
)