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

VS社区版运行C程序触发ucrtbased.dll异常,在线编译器可正常运行求助

解决Visual Studio中C程序输入字符串崩溃的问题

核心问题分析

你的程序在VS中崩溃,根源是**scanf_s的用法不符合MSVC的安全要求**,和在线编译器的标准scanf行为存在差异:

  1. 格式符错误:%[^\n]s是错误写法,%[^\n]本身就是完整的格式说明符,用于读取直到换行符的字符串,不需要额外添加s。
  2. 缺少缓冲区大小参数: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:41:04