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

Code::Blocks中scanf_s引发无输出及调试异常退出问题解析

为什么修改scanf_s的参数后程序能正常运行?
  • scanf_s是C11标准引入的安全输入函数,和普通scanf的核心区别是:对于%c(单个字符)、%s(字符串)这类格式符,必须额外传入一个参数,用来指定目标缓冲区的大小。
  • 你最初写的scanf_s("%c %c %c", &a, &b, &c)犯了关键错误:每个%c都缺少对应的缓冲区长度参数。这种参数不匹配的情况会触发未定义行为,表现为程序异常退出、无输出等奇怪问题。
  • 修改后的scanf_s("%c%c%c", &a, 1, &b, 1, &c, 1)能正常运行,是因为每个%c后面都加了1——这个1告诉scanf_s:对应的char变量缓冲区大小是1字节(刚好是单个char的占用空间),完全符合scanf_s的调用规范。
  • 补充:你把格式串里的空格去掉不影响核心问题,要是想保留输入时的空格分隔,正确写法应该是scanf_s("%c %c %c", &a, 1, &b, 1, &c, 1),一样要给每个%c加长度参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:57:36