我用 Visual Stdio 2013 编写C程序
出现下面这个错误:
错误 1 error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
最后我在程序前加上一句“ #define _CRT_SECURE_NO_WARNINGS "就消去错误,能解释一下吗? 我不懂。。。
因为sprintf是不安全的,所以默认情况下编译器拒绝编译包含对它调用的代码。
#define _CRT_SECURE_NO_WARNINGS 可以让编译器对此放行。
什么叫不安全呢?我们知道,对于x86处理器来说,程序的数据和指令都是放在同一个内存中的,如果我们开辟的缓冲区比较小,而给sprintf传递了一个很大的字符串
就会发生缓冲区溢出,这样可能破坏堆栈,如果堆栈中返回地址被修改,那么精心构造的攻击数据可能让程序转入另一个数据区域,并且将那里的数据当成代码执行。
如果这些代码不怀好意,那么就会破坏你的电脑为所欲为,所以叫不安全。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。