错误代码:
scanf("%d%d", &num1, &num2);
原因:scanf是C语言提供的,scanf_s不是标准C语言提供的,是VS编辑器提供的,在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用。
解决方案:
- 使用scanf_s代替 scanf,不建议,其他编译器无法识别,缺少跨平台性和可移植性。
scanf_s("%d%d", &num1, &num2);
- 在代码顶部加入: #define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
3.右击工程中源代码(main.c)处,打开属性栏>配置属性>C/C++>所有选项,将SDL检查改为否,保存
scanf和scanf_s区别
scanf()不会检查输入边界,可能造成数据溢出。scanf表示从键盘输入指定格式的数据。如:
scanf("%d",x);指从键盘给x输入一个int型(整型)数据,如果数值范围超出了int的范围,scanf也会存到int内存里去,这就造成了数据溢出问题;
scanf(“%s”,&name,n);指从键盘给x输入一个字符串型(整型)数据,整形n为name类型的大小,如果name是数组,那n就是该数组的大小。
scanf_s()会进行边界检查。如:
scanf_s("%d",x);指从键盘给x输入一个int型(整型)数据,如果数值范围超出了int的范围,scanf_s会只取4个字节的数据存入内存,剩下的清空。