如何去掉去掉VC++的安全警告提示

2023-11-15

在用Vc进行进程编写时,你有可能会遇到一大堆的警告:warning C4996
如:warning C4996: '': This function or variable may be unsafe.


原因是VC使用了更加安全的run-time library routines。
新的Security CRT functions(就是那些带有“_s”后缀的函数):

那么如何搞定这些警告呢:
方法一:手工将原来的旧函数替换成新的Security CRT functions。
方法二:屏蔽这个警告。
            在预编译头文件stdafx.h里(注意:一定要在没有include任何头文件之前)定义下面的宏:
            #define _CRT_SECURE_NO_DEPRECATE

或者

            #define _CRT_SECURE_NO_WARNINGS.
           
或者

            #param warning(disable:4996)


在预编译头文件stdafx.h里(同样要在没有include任何头文件之前)定义下面的宏:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
链接的时候便会自动将旧函数替换成
Security CRT functions。
注意:这个方法虽然使用了新的函数,但是不能消除警告,还得同时使用方法二。。。

 

1. 不要认为 strcpy_s strncpy_s( 以及其他的字符串函数)(在空间不够的时候)会自动终止拷贝(truncate截断,不截断则意味着溢出).如果需要自动截断,请使用strncpy_s (同时使用_TRUNCATE作为长度参数)
    2.
记住fopen_s缺省是独占模式。如需共享使用文件,应该使用_sopen
    3.
别忘了_dupenv_s, 它将比_getenv_s更容易使用,因为它能自动分配一个正确长度的内存(buffer)
    4.
scanf_s中小心参数顺序。
    5.
确定printf_s中格式字符串的正确。
    6.
使用_countof(x)来取代sizeof(x)/sizeof(element). _countof将会正确的计算元素个数,而且如果x是一个指针,编译器将会发出一个警告(来提醒程序员,仅针对C++编译)
    7.
记住所有的sizes(大小,非长度)都是使用characters(字符,unicode下一个字符占2byte)作为单位,而不是bytes(字节).
    8.
记住所有的sizes(大小,非长度,缘由同上)包含了字符串结束符'/0'(即别忘了很多情况下size需要+1)
    9.
调试的时候监视数据0xfd (在调试版本下)0xfd将会被填充在数据(buffer,通常是字符串)的结尾处。如果运行非你所愿,可能会得到一个长度错误。
    10.
检查所有的错误。 许多新函数相比旧函数,能返回(表示)错误信息(的数值)

 

从ANSI改到Unicode主要有如下几点:
1.char  --> TCHAR
2.字符串前面增加 _T,如"Hello World" 改为 _T("Hello World);
3.strcpy等字符串操作函数改为 StrCpy;
4.LPSTR改为LPTSTR, LPCSTR改为LPCTSTR
5.对于函数定义中使用char、char*类型参数的,需要进行相应的字符串转换

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何去掉去掉VC++的安全警告提示 的相关文章

  • 是否可以从 .apk 文件获取 Android.mk 或本机源文件?

    看来从 apk文件中获取Java源文件是很容易的 但是否有可能得到Android mk or native通过工具或棘手的方法从 apk 文件中获取源文件 我正在研究 Android 应用程序本机代码安全性 因此这些文件对我来说非常重要 谢
  • 油猴安全性如何?

    我从未真正使用过greasemonkey 但我正在考虑使用它 考虑到 GreaseMonkey 允许您让互联网上的随机人改变您喜爱的网站的行为 它的安全性如何 他们可以窃取我的密码吗 看看我的私人数据 做我不想做的事吗 油猴安全性如何 Th
  • 如何在nodejs缓冲区中存储整数?

    节点jsBuffer http nodejs org docs v0 4 12 api buffers html是相当膨胀 然而 它似乎适合存储字符串 构造函数采用字符串 字节数组或要分配的字节大小 我使用的是 Node js 0 4 12
  • 在没有默认 java.policy 文件的情况下运行 Java 安全管理器

    我不想修改 java 主目录中的任何内容 但是 我担心有时我的默认 java policy 文件可能过于宽松 当我使用以下命令运行 java 时 有没有办法使用指定的策略文件作为唯一的策略文件 Djava security manager
  • 如何读取节点中的单个位缓冲区

    如何读取节点中的单个位缓冲区 例如
  • SSL 和会话劫持/固定

    快问 SSL 是否完全防止会话劫持 固定 谢谢 不可以 例如 在以下情况下可能会发生劫持 被黑客入侵的 CA 根签署无效证书 该证书可用于发起中间人攻击 被黑客攻击的域名所有者电子邮件收件箱使黑客有可能购买经过域名验证的证书 错误的密钥策略
  • 局部变量在栈中的顺序是怎样的?

    我目前正在尝试对缓冲区溢出漏洞进行一些测试 这是易受攻击的代码 void win printf code flow successfully changed n int main int argc char argv volatile in
  • 为什么 strcpy 的这种使用被认为是不好的?

    我发现了下面的一段C代码 标记为 BAD 又名缓冲区溢出错误 问题是我不太明白为什么 输入字符串长度在分配等之前被捕获 char my strdup const char s size t len strlen s 1 char c mal
  • Mac 应用程序商店 - 尝试让加密发挥作用。 。 。我缺少什么?

    我正在尝试使用 Alan Quartermain 的解决方案 如该问题所链接 Mac App Store 收据验证码 https stackoverflow com questions 4261348 mac app store recei
  • GSSException:消息流已修改 (41)

    我正在森林架构中使用 LDAP 所有服务器和我的服务器都是 Windows 我使用 NTLM 身份验证绑定到 AD 我有一个针对 LDAP 服务器执行操作的 Java 代码 该代码被包装为 tomcat servlet 直接运行 Java
  • 开放、安全的 TCP 通道的安全期限有多长?

    我们有一个网络服务 充当我们的客户和其他服务之间的网关 客户端向第三方服务发送消息并从第三方服务接收随机消息 客户端的服务器通过安全套接字打开到我们的 Web 服务器的通道 以便接收传入的消息 并且不必每隔几分钟轮询一次服务器 我的问题是
  • 包含所有这些第 3 方 JavaScript 文件是否会带来安全风险?

    当您将所有这些不同的 javascript 文件包含在用于各种服务 例如网站分析 点击跟踪等 的页面上时 这是否会造成巨大的安全风险 因为使用 javascript 他们可以劫持表单上输入的个人信用卡 目前这怎么被认为是安全的 意思是 你的
  • 如何将 openssl_pkey_get_public 和 openssl_verify 转换为 C# .NET

    PHP 代码验证来自银行的 iPizza 签名 key openssl pkey get public file get contents preferences bank certificate if openssl verify dat
  • ColdFusion 管理员登录和密码恢复

    我最近接手了 CF 网站的开发 但在获取 CF 管理员的登录名和密码时遇到了一些问题 我希望另一个 StackOverflower 能够对获取访问权限有一些见解 我们可以访问 FTP 和任何其他托管相关详细信息 任何有用的见解将不胜感激 打
  • 对于向 XSS 漏洞开放 JWT,我应该有多担心?

    我正在构建一个 Node js Web 应用程序 该应用程序使用用于 GUI 的 React 和由 Apollo 提供的 graphQL 用于连接到 AWS 上的 RDS MySQL 实例的后端 我正在对用户进行身份验证 然后返回 JWT
  • Twig 渲染与包含 - 何时何地使用其中之一?

    我读了Twig 渲染与包含 https stackoverflow com questions 9077097 twig render vs include但这不是我要找的 我不确定应该在何时何地使用 render 以及何时应该使用 inc
  • 半透明数据库

    我正在构建一个包含健康信息的应用程序 这个面向消费者的应用程序对我来说是新的 我想要一种方法来完全消除隐私问题 当我回顾保护可公开访问的数据库中的敏感数据的方法时 我经常遇到数据库半透明的概念 有原书 http www wayner org
  • ulimit -r 返回不同的值

    我将以下两行添加到系统范围的 etc security limits conf 中 soft rtprio 55 hard rtprio 55 系统重新启动后 根据我在计算机上访问用户帐户的方式 我会得到两个不同的结果 user clien
  • 在数据库中存储用户电子邮件地址的最佳和最安全的方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 出于安全原因 在将用户电子邮件放入数据库之前是否值得对其进行加密 我知道我们对密码进行哈希和加盐 但那是另一个故事 因为我们并不真正需要密码原件
  • 客户端和服务器之间的安全连接

    我正在开发一个服务器组件 它将为嵌入式客户端的请求提供服务 这也在我的控制之下 现在一切都是测试版 安全性是这样的 客户端通过 https 发送用户名 密码 服务器返回访问令牌 客户端使用自定义标头中的访问令牌通过 http 发出进一步请求

随机推荐