首页 > 编程知识 正文

用Visual Studio编写c语言报错C4996 该如何解决

时间:2023-05-06 08:39:06 阅读:182296 作者:844

今天用VS写C语言时,编译器报告了C4996;

此函数或变量可能不安全。 请考虑相反使用safe_version。 要禁用销毁,请使用_CRT_SECURE_NO_WARNINGS。

我以前在DEV、CV6.0 'scanf '上用键盘输入也可以,为什么现在用Visual Studio2017不行呢? 于是我又复印了代码贴在DEV上,一口气写了下来。 编译过程像差速器一样,我想纵向淋湿。 回去看看VS吧。 冰泉凝结着冰冷的弦,没意思。 但是为什么呢? 我带着误报去官网解决方案https://docs.Microsoft.com/en-us/CPP/error-messages/compiler-warnings/compiler-warning-com

官方网站这样说:

建议使用函数或变量safe_version来解决此问题。 如果您确定代码中无法重写或超读缓冲区,并且由于可移植性而无法更改代码,则可以关闭警告。

要关闭CRT中这些函数的销毁警告,请定义_CRT_SECURE_NO_WARNINGS。 要关闭全局变量销毁警告,请定义_ CRT _ secure _ no _ warnings _ globals

查了百度知道:

因为C4996使用了scanf、gets等不安全的函数。 在VS中,为了防止缓冲区溢出,需要将这些原始库函数替换为MS自己的_s系列函数。 例如,使用scanf_s代替scanf。 最初,为了支持更安全的新函数,Visual Studio 2017取消了某些CRT、标准C库函数和全局变量。 所以我在调用“scanf”时编译器会发出警告。

方法一:禁用此警告,代码中的宏_CRL_SECURE_NO_WARNINGS :方法二:在文件顶部添加行: #define _CRT_SECURE_NO_WARNINGS 将_CRT_NONSTDC_NO_WARNINGS添加到“预处理程序定义”中。 选择“确定”并保存,然后重新生成项目。 方法使用scanf_s :由于scanf在读取数据时不检查边界,可能引起内存访问越界的问题。 使用scanf_s时,由于增加了一个用于控制读取字符数的参数,因此比在scanf中输入更安全。 scanf _ s # include stdio.h # include stdlib.hint main ({ char str1[3]; scanf_s('%s ',str 1,4 ); printf(%s(n ),str1); 返回0; } scanf # include stdio.h # include stdlib.hint main () { char str1[3]; scanf('%s ',str1); printf(%s(n ),str1); 返回0; () ) ) ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。