C语言不检查数组越界和内存缓冲区越界
编译器对局部变量有两种存储方式,对于简单数据类型的变量(比如int,char,
short或者指针变量等)编译器会首先尽可能的采用CPU内部的通用寄存器来表示,
第二种方式是对于那些没有办法用寄存器表示的变量或数组,结构体等变量如buf[8*1024]采用当前的堆栈空间来存储
对于buf而言,很容易将系统的堆栈空间耗尽,如果算法必须采用大数组,可以采用 static char buf[8*1024] 的方法来定义,虽然这同时会带来程序不可重入的问题。
将函数中在堆栈中申请的临时变量地址return是非常危险的,出函数后,该函数的栈帧就已经无效了,返回这段内存地址毫无意义