今天写程序时用到了strcpy()这个函数,
每次程序到运行结束时都会崩溃,显示这种错误
stack around the variable “XX” was corrupted.
经过检查发现,我使用strcpy拷贝的源字符串的长度超出了目标数组的大小,即lenth(src)>lenth(dest);
但是输出结果显示的是源字符串的值,说明strcpy在越界时是不检查的,它会继续覆盖边界外的内存,即修改了dest数组外面的值,直到达到src的长度;
这里我又单独写了个demo运行居然又不报错了
说明这个函数的可怕之处在于它出错是偶然性的,之前报错的程序中我还使用了socket,MySQL等大量函数,可能是它强制向后写栈区时,如果是空栈区就不会报错,遇到了非空栈区也不在运行时报错,到运行介绍归还栈区时才报错。
某个工程在开发环境运行通过了,到生产环境崩溃的后果不堪设想。
因此推荐使用更安全的strncpy()函数,它使用时需要指定拷贝的长度,超出部分不会复制