错误原因:从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的异同同理。
本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2019anzhuangwenti/2020/0725/4573.html