很多学习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里可以使用,笔者建议使用后两种方案。
文章讲述了新手在使用C语言编程时,可能会遇到scanf和gets函数在VisualStudio中无法使用的问题,这主要是由于这些函数存在内存溢出风险。微软为了安全考虑,在新版VS中限制了它们的使用。提供了三种解决方案,包括使用安全的scanf_s函数、定义_CRT_SECURE_NO_WARNINGS预处理器宏或禁用特定警告。建议初学者采取后两种方案以确保代码兼容性。
&spm=1001.2101.3001.5002&articleId=129637829&d=1&t=3&u=47fc591b0baf42a79a6323a13b9bc857)
1万+

被折叠的 条评论
为什么被折叠?



