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

