VS社区版运行C程序触发ucrtbased.dll异常,在线编译器可正常运行求助
解决Visual Studio中C程序输入字符串崩溃的问题
核心问题分析
你的程序在VS中崩溃,根源是**scanf_s的用法不符合MSVC的安全要求**,和在线编译器的标准scanf行为存在差异:
- 格式符错误:
%[^\n]s是错误写法,%[^\n]本身就是完整的格式说明符,用于读取直到换行符的字符串,不需要额外添加s。 - 缺少缓冲区大小参数:
scanf_s作为VS强制的安全输入函数,要求必须传入字符数组的大小以防止缓冲区溢出,你的代码未提供该参数,直接触发了内存访问异常。
修正后的代码
#include <stdio.h> int main() { char str[20]; printf("Enter something\n"); // 修正scanf_s格式符,添加缓冲区大小参数 scanf_s("%[^\n]", str, (unsigned)_countof(str)); // 清空输入缓冲区残留的换行符(若程序有后续输入则需保留,当前场景可选) getchar(); printf("%s", str); return 0; }
额外说明
- 单个错误引发大量无关错误:这是MSVC编译器的常见现象,当存在语法错误(比如遗漏括号)时,编译器的语法解析会出现混乱,导致后续错误提示失真,只需定位并修正第一个错误,其余错误通常会自动消失,并非程序损坏或设置问题。
- 无需修改C语言版本,保持默认标准即可,问题本质是安全输入函数的用法差异,而非语言版本兼容问题。
内容的提问来源于stack exchange,提问作者Obiick
相关产品推荐
相关产品推荐

