zoukankan      html  css  js  c++  java
  • VS提示This function or variable may be unsafe,The POSIX name for this item is deprecated

    一、VS提示函数不安全

    error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

    方法1:

    C/C++ -> 预处理器 -> 预处理器定义 ->添加:_CRT_SECURE_NO_WARNINGS

    方法2:

    在报错文件的文件头添加:#pragma warning(disable:4996)#define _CRT_SECURE_NO_WARNINGS(在include之前添加)


    scanf、gets、fgets、strcpy、strcat、fopen 等都是C语言自带的函数,它们都是标准函数,但是它们都有一个缺陷,就是不安全,可能会导致数组溢出或者缓冲区溢出,让黑客有可乘之机,从而发起“缓冲区溢出”攻击。scanf_s、gets_s、fgets_s、strcpy_s、strcat_s微软自己发明的安全函数,它们仅适用于 VS,在其它编译器下无效。这些安全函数在读取或操作字符串时要求指明长度,这样一来,过多的字符就会被过滤掉,避免了数组或者缓冲区溢出。

    二、VS提示POSIX不推荐

    error C4996: 'getcwd': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _getcwd. See online help for details.

    POSIX命名方式不推荐使用,推荐使用ISO C和C++的函数名_getcwd

    1. POSIX

    POSIX(Protable Operating System Interface of UNIX),可移植操作系统接口,POSIX详细描述了一些函数,这些函数是在C标准库之外定义的,这些函数只能被部分的编译器所支持。

    2. ANSI C

    ANSI(American National Standards Institute),美国国家标准协会。ANSI C则是ANSI对C语言发布的标准。使用C的软件开发者被鼓励遵循ANSI C文档的要求,因为它鼓励使用跨平台的代码。ANSI C现在被几乎所有广泛使用的编译器支持。现在多数C代码是在ANSI C基础上写的。任何仅仅使用标准C并且没有任何硬件依赖假设的代码实际上能保证在任何平台上用遵循C标准的编译器编译成功。

    3. 解决方案

    3.1. 添加宏定义

    以下两行代码任意一个都可解决该问题

    #pragma warning(disable:4996)
    #define _CRT_NONSTDC_NO_DEPRECATE
    

    3.2. 使用ANSI C方式命名的函数

    在函数名前加下划线,即_getcwd()

  • 相关阅读:
    tomcat虚拟目录配置
    关于JS闭包
    数据列表里结合负边距做间隔线的技巧需注意的小细节
    前端优化技巧笔记
    浏览器工作原理相关笔记
    工作小心得(关于绝对定位元素)
    关于定位和溢出处理的一些小经历
    关于定位和z-index的一些小经历
    fullpage实现(-)
    移动端布局-实例
  • 原文地址:https://www.cnblogs.com/mmmmmmmmm/p/14504301.html
Copyright © 2011-2022 走看看