问题 问答题

阅读以下说明和C函数,回答问题1至问题3,将解答写在答题纸的对应栏内。  

   

    

 

【说明1】函数substring(constcharstr[],intindex,intlength)的功能是求出字符串str中指定序号index开始且长度为length的子串,并返回所取出的子串。以字符串"Chinatoday"为例,其第一个字符"C"的序号为1(而其在字符数组str中的下标为0),从序号5开始且长度为3的子串为"at"。【C函数1】

【问题1】函数substring中有两处错误,请指出这些错误所在代码的行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行(有注释时,注释可省略)。

答案

参考答案:

解析:

 本问题考查字符串运算及常见编程错误的处理。  求子串运算substring的原型如下:    根据题目说明,参数index为子串的位置序号(从1开始),length为子串的长度。显然,在函数substring中,首先应判断参数的合理性,即index应不小于1,length应不小于0,同时,从index开始可以得到长度为length的子串,即index+length-1应不大于最后一个字符的序号。因此,第6行的代码是正确的。  第7行申请动态内存块的语句是正确的。第9行的代码判断内存申请是否成功,其中,判断指针tptr的表达式tptr=0有错误,即误用了"="与"=",导致无论内存申请操作是否成功,在此都将tptr赋值为空指针,造成内存泄漏。第10、11行代码用于从字符串str中复制子串,代码是正确的。第12行的代码设置字符串的结束标志,为错误代码。由于所获得字符串的长度为length,其在动态数组tptr的下标从0开始,因此,下标length-1为最后一个字符的下标,tptr[length-1]='\0'会导致丢失最后一个字符,因此该语句中tptr的下标应为length。

单项选择题
多项选择题

2003年10月22日下午2时许,某水库管理处2号料仓建设工地正在紧张地进行施工,施工者是由河南人韩某带领的一支农民工队伍。当时,韩某临时雇来的5名农民工正用1台自制小吊车吊运混凝土和其他施工建筑材料。当这5名农民工把小吊车由料仓南侧墙向西侧墙推动时,自制小吊车的起重拔杆碰在料仓西侧墙上方带电的10KV高压线上,导致推小吊车的5名农民工当即被强大电流击倒,2人死亡,3人受伤。触电原因是()

A.建设单位违反上述规定,在10KV高压线下方安排2号料仓这样的施工项目,并作出违反安全规定的项目设计,当使用单位对上述设计提出书面反对意见时,建设单位未予以采纳。

B.设计单位也是总承包单位,未对该项目建设的安全性进行科学论证,即在10KV高压线下设计2号料仓;在没有任何安全防护和没有对该项目建设存在的安全隐患提出预防事故措施的情况下,发包2号料仓施工并组织施工,导致施工单位冒险违章作业。

C.监理单位未对该项目进行安全论证并提出隐患整改意见,即给承包单位下达了开工令,当施工单位和使用单位均提出不同意见时,也未引起监理单位的重视和采纳,导致施工单位的违章作业未能被及时制止并改正。

D.农民工队伍的管理者对施工现场的危险因素没有认真研究,怀有侥幸心理,也未采取可靠的安全防护措施,片面追求效益,野蛮施工,并违章使用国家禁止使用的自制小吊车,且未对小吊车操作人员进行岗前安全教育(无记录),现场管理人员违章指挥,操作人员冒险上岗,作业中又不安排专人观察监护。