很多学习C语言的新手朋友都会遇到scanf,gets等函数在vs上无法使用的问题
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
return 0;
}


默认情况会有以上报错
分析:
scanf会有内存溢出的风险,那为什么会有这样的风险呢 请看代码示例
#include <stdio.h>
int main()
{
char a[10];//声明一个长度为10的字符串
scanf("%s",&a);
return 0;
}
此时,如果从屏幕输入了超过10个字符,scanf仍然是会进行赋值的,但很明显字符串a只有10个字符的空间,这时就出现了内存溢出。
也就是说 scanf只负责赋值 但不负责检查是否内存溢出,因此,微软对其进行了限制,在Visual Studio较新版本上默认情况无法直接使用这个函数。
解决方案一:
微软在自家IDE上推出了scanf_s函数用于解决内存溢出的潜在风险,只需在原有代码基础上加上_s即可
#include <stdio.h>
int main()
{
int a;
scanf_s("%d",&a);
return 0;
}
解决方案二:
在源文件的最上面加一行#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
return 0;
}
解决方案三:
右击整个项目,点击属性。

点击C/C++,点击高级,在禁用特定警告里输入4996。

此方法只对当前项目有效,其他项目同样需要手动设置。
总结:
无论是scanf还是gets函数,都是因为内存溢出的潜在风险,导致微软不建议用户使用,初学者可以采用方案一来解决这个问题,但由于此函数只在visual studio里可以使用,笔者建议使用后两种方案。