在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
相关产品推荐
相关产品推荐

