开发者社区> 问答> 正文

编程时的一个Error,望指教,谢谢

我用 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 "就消去错误,能解释一下吗? 我不懂。。。

展开
收起
a123456678 2016-03-20 10:25:33 2346 0
1 条回答
写回答
取消 提交回答
  • 因为sprintf是不安全的,所以默认情况下编译器拒绝编译包含对它调用的代码。

    #define _CRT_SECURE_NO_WARNINGS 可以让编译器对此放行。

    什么叫不安全呢?我们知道,对于x86处理器来说,程序的数据和指令都是放在同一个内存中的,如果我们开辟的缓冲区比较小,而给sprintf传递了一个很大的字符串
    就会发生缓冲区溢出,这样可能破坏堆栈,如果堆栈中返回地址被修改,那么精心构造的攻击数据可能让程序转入另一个数据区域,并且将那里的数据当成代码执行。
    如果这些代码不怀好意,那么就会破坏你的电脑为所欲为,所以叫不安全。

    2019-07-17 19:08:50
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载