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()

原文链接: https://www.cnblogs.com/mmmmmmmmm/p/14504301.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    VS提示This function or variable may be unsafe,The POSIX name for this item is deprecated

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/404202

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月24日 下午6:44
下一篇 2023年4月24日 下午6:44

相关推荐