数据类型与命令行编程全解析
一、数据类型与缓冲区溢出问题
在编程过程中,我们会遇到各种各样的数据类型,同时也会面临一些潜在的问题,比如缓冲区溢出。下面我们通过一个具体的项目来深入了解。
打开 Overflow
项目,它位于 08.10 - Overflow
文件夹中。该项目与 FullName
项目基本相同,只是多了一行代码: PrintFullName( "Wilhelmina", "Romanowski" );
。当运行这个项目时,程序在调试器中会以致命的 SIGABRT
错误停止。这意味着程序崩溃了,而崩溃的原因是程序试图在数组范围之外写入数据。
fullName
数组只有 20 个字符元素,所以它能存储的字符串最大长度是 19 个字符(需要一个额外的元素来存储 '\0'
字符)。而 “Wilhelmina Romanowski” 这个名字明显超过了这个长度。 strcat()
函数只是按照指令将字符从一个地方复制到另一个地方,它并不知道 fullName
数组是否有足够的空间,这就需要我们进行检查。
这种编程错误被称为缓冲区溢出,它是软件中最容易被利用的弱点之一。黑客会故意向程序输入异常或大量的数据,试图诱使程序在不该写入的地方写入值,从而覆盖程序中的其他变量,甚至接管程序并插入他们自己的代码。
为了避免缓冲区溢出,我们可以通过边界检查或规划来确保不超出数组的限制。