阅读以下说明和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。