You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:15:34