原因
scanf()函数是不安全的(scanf()在读取数据时不检查边界,所以可能会造成内存访问越界)。例如:
#include <stdio.h>
int main() {
int num1 = 0;
int num2 = 0;
int num3 = 0;
int sum = 0;
scanf("%d%d%d",&num1,&num2,&num3);
sum = num1 + num2+num3;
printf("%d\n", sum);
return 0;
}
当用户输入1,2,3,4时,只会把前三个值赋值给 num1,num2,num3,第四个变量可能会赋值到内存其他空间上去,从而影响到程序的正常运行。
方法一
将scanf()函数换成scanf_s()函数。
例如:
#include <stdio.h>
int main() {
int num1 = 0;
int num2 = 0;
int num3 = 0;
int sum = 0;
scanf_s("%d%d%d", &num1, &num2, &num3);
sum = num1 + num2+num3;
printf("%d\n", sum);
return 0;
}
注意:在调用该函数时,必须提供一个数字以表明最多读取多少位字符(字符类型时,整数类型时跟scanf()函数相同),此函数只有在vs2013以上版本上能编译运行(其他软件编译会报错)
方法二
在上方加入 #define _CRT_SECURE_NO_WARNINGS 1(这样比较麻烦,每次创建一个文件要加一遍)
方法三
打开你的vs安装目录。(我的是vs2019,安装在D盘上的,默认应该是C:\Program Files (x86)\vs\Common7\IDE\VC\vcprojectitems,版本不同位置有差异。)
找到newc++file.cpp文件并打开(加入#define _CRT_SECURE_NO_WARNINGS 1并保存),这里推荐使用notepad++编辑保存,记事本保存会拒绝访问
新建.c文件就会自动加一句 #define _CRT_SECURE_NO_WARNINGS 1
简单的解决方式
直接换编译器,比如 sublim,Dev-C++