为何scanf在for循环中可在Dev-C++运行却无法在Visual Studio工作?
解决Visual Studio中scanf函数的C4996错误问题
我编写的一段包含scanf的for循环代码能在Dev-C++中正常运行,但在Visual Studio中报错,错误信息如下:
Error C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead.
对应的代码:
#include<stdio.h> int main() { int arr[5] = { 0 }; int i = 0; printf("Enter the number :"); for (i = 0; i < 5; i++) { scanf("%d", &arr[i]); } return 0; }
三种解决办法
1. 改用scanf_s函数
这是Visual Studio官方推荐的安全替代函数,针对本案例的整型输入,写法和scanf几乎一致:
#include<stdio.h> int main() { int arr[5] = { 0 }; int i = 0; printf("Enter the number :"); for (i = 0; i < 5; i++) { scanf_s("%d", &arr[i]); } return 0; }
⚠️ 注意:scanf_s是微软专属函数,代码换其他编译器(比如Dev-C++)可能无法编译,移植性会受影响。
2. 代码中添加宏定义禁用警告
在代码最开头添加宏定义,让编译器忽略这个安全警告:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int arr[5] = { 0 }; int i = 0; printf("Enter the number :"); for (i = 0; i < 5; i++) { scanf("%d", &arr[i]); } return 0; }
这种方法能保留原代码的跨编译器兼容性,适合需要在多个环境运行的场景。
3. 通过Visual Studio项目设置全局禁用警告
如果不想在每个文件加宏,可以直接修改项目设置:
- 右键项目名称 → 选择「属性」;
- 依次展开「配置属性」→「C/C++」→「预处理器」;
- 在「预处理器定义」里添加
_CRT_SECURE_NO_WARNINGS,点击确定保存即可。
内容的提问来源于stack exchange,提问作者Anjana Indunil
相关产品推荐
相关产品推荐

