在这些代码失败的哪些行中(意思是:不做它们应该做的事情),为什么?
int main(void) {
char student[64] = "some guy";
char* teacher;
/* line1 */ strcpy(teacher, student);
/* line2 */ teacher=student;
/* line3 */ strcpy(student, "Alber Einstein");
/* line4 */ student = teacher;
}
Run Code Online (Sandbox Code Playgroud)
开玩笑,但也很严肃:
第1行失败是因为您使用了该strcpy( )函数,如果维护程序员student在将来的某个时间点增加了数组的大小,则可能导致副本覆盖目标缓冲区的边界.这可能允许在某些环境中执行任意代码,并且是一个安全漏洞.
第2行失败,因为您现在有相同内存块的两个名称,如果稍后使用它们,可能会导致别名冲突和数据损坏.
第3行失败是因为您拼错了Albert Einstein的名字.
第4行失败,因为它无效C.
关键是,您需要先制定一个规范,然后才能对程序如何执行或不执行失败进行有意义的讨论.
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |