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

在VS中运行C代码触发Access Violation异常,请求原因排查

Access Violation异常原因及修复方案
  • 问题根源:你使用的scanf_s是Visual Studio专属的安全输入函数,和标准scanf用法有区别——当读取字符串到字符数组时,必须额外传入缓冲区大小参数。没传这个参数的话,函数无法确定内存边界,直接写入内存就会触发访问违规。

  • 修复后的代码:

#include <stdio.h>

int main() {
    char name[10];
    printf("Enter your name\n");
    // 增加缓冲区大小参数,用_countof获取数组元素个数
    scanf_s("%s", name, (unsigned)_countof(name));
    printf("Welcome %s\n", name);
    return 0;
}
  • 额外说明:
    • _countof(name)是VS提供的宏,自动计算数组的元素数量(这里就是10),也可以直接写数字10,但用宏能避免手动写数出错。
    • 你的数组name[10]最多能存9个字符加1个字符串结束符\0,如果输入的名字过长,scanf_s会自动截断输入,防止缓冲区溢出,这也是它的安全设计。

内容的提问来源于stack exchange,提问作者Alson K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:02:02