问题 问答题

阅读以下关于C语言及C代码的叙述。

[说明]

在开发某嵌入式系统时,设计人员根据系统要求,分别编写了如下三部分程序,其中:

[C代码1]

是李工为了在嵌入式平台上开发一段可变参数函数,在X86平台上实现的一个参数个数可变函数实例。

[C代码2]

是王工在编写软件时,自己编写的内存拷贝函数。

[C代码3]

是赵工编写的一段数据处理的程序,其中fun0的含义为从已创建的一个单向链表中查找倒数第index个结点。他的设计思路为:首先创建两个指针ptr1,ptr2,并且都指向链表头,然后ptr1向前走index步,这样ptr1和ptr2之间就间隔index个结点,然后ptr1和ptr2同时向前步进,当ptr1到达最后一个结点时,ptr2就是倒数第index个结点了。ReverseList()为赵工编写的对已有单向链表进行逆序重排的函数。

请问C代码2中static的作用是什么?const的作用是什么?王工自己编写的内存拷贝函数安全么?如存在缺陷,请指出缺陷在哪里。

答案

参考答案:

1) static的作用:是将变量修饰成静态变量,静态变量的存储地址在整个程序的运行执行期间均保留,不会被别的变量占据。

2) const的作用:是用于冻结一个变量,使其值在程序中不能被进一步改变。

3)不安全,有缺陷。

4)应对形参的有效性进行检查,应判形参dest、src指针是否为空,形参n是否大于0,还应保证dest所指向的内存空间不越界。

解析:

[分析]: 在程序设计中,static变量和const变量的应用非常广泛。static变量表示将变量修饰为静态变量,其含义是指其对应的存储空间在整个程序的运行过程中都保持不变,不会像堆栈那样被重复使用。static即可以用来修饰局部变量,也可以修饰全局变量。

一旦变量定义为是const,则其对应的值不能再被修改。在程序运行中,此变量的值就一直维持在其初始化时候的值。

王工编写的这段程序不安全,存在严重的安全漏洞,具体的缺陷包括:

(1)对于指针参数的有效性没有进行任何判断,如果指针为NULL,这样访问存在严重的安全问题。

(2)参数n的有效性也没有进行判断,如果参数n对应的空间超过src所包含的空间,则函数得到的结果和期待的结果会有所偏差。同样,如果n对应的空间超过dest所包含的地址空间,则会造成程序的混乱,会将内存冲掉,可能导致灾难性后果。

填空题
单项选择题