向printf.sprintf这种函数在编译时很难检查错误,所以程序员必须小心.比如我就遇到了这样的bug: void test() { ]; sprintf(t,"); } //执行sprintf时没有报错,但是退出test时出错 这是因为缓冲区溢出必然会覆盖调用函数的堆栈,导致函数退出时无法正确恢复现场而崩溃. 究其原因还是因为printf提供了一种SDL小语言,这种语言的解释器是printf函数,而不是C编译器,故编译器并没有责任指出SDL的错误,需要我们自己注意检查.这就像我们在项目中引…