Visual Studio 2019报4996错误的解决办法

错误原因:从VS2013开始,编译器将scanf和printf判定为不安全的方法,所以将会推荐使用scanf_s和printf_s方法。报错如图
在这里插入图片描述

  • 解决办法:
    在代码首行加入:
#pragma warning(disable:4996)

下面将讨论scanf_s与scanf的异同

  • 使用scanf_s和scanf输入整数类型,字符类型和实数类型操作相同
  • 输入字符串时,两者有所不同
char name[n];
scanf("%s",name);  //scanf用法
scanf("%s",name,n);// scanf_s用法,n为缓冲区大小,最多容纳n-1个字符,因为最后一个字符为\0
/*
为了避免引用不存在的元素,所以传入一个与参数大小有关的值,防止黑客利用该漏洞黑掉系统。
*/

ANSI C中没有scanf_s,只有scanf,scanf在读取时不检查边界,所以可能造成内存访问越界的问题

char buf[5]={'\0'};
scanf("%s",buf);//此处如果输入0123456,那么后面的字符会被写到别的空间上

printf_s 和printf的异同同理。

发布了33 篇原创文章 · 获赞 27 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/eclipse9527/article/details/103445560