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

C语言查找字符串元音时scanf失效fgets正常的原因求解

你写的scanf语句存在两个核心错误,按影响优先级排序如下:

  1. 数组访问越界,传入的存储地址完全错误
    你写的参数是&str[100],C语言中数组下标从0开始计数,你定义的char str[100]合法的下标范围是0~99,str[100]本身就是数组边界外的非法内存地址。把这个地址传给scanf做写入目标,会直接触发缓冲区溢出,属于未定义行为,程序运行结果完全不可预期,崩溃、输出乱码、无结果都是常见表现。
    正确的传参应该传入数组首地址,写str或者&str[0]都可以。

  2. 没有限制输入长度,存在安全隐患
    即使你修正了地址问题,%[^\n]的写法不会限制读取的字符长度,如果用户输入的字符串长度超过99(需要留1个字符位置存储字符串结束符\0),依然会发生缓冲区溢出。更安全的写法是加上长度限制:%99[^\n]。

额外补充:你写法里的%*c作用是丢弃输入缓冲区里残留的换行符,但如果%[^\n]因为用户直接输入回车匹配失败时,%*c不会执行,换行符会残留在输入缓冲区,后续有其他输入操作时可能会触发异常,这属于边缘场景问题,不是你这次代码跑不通的核心原因。

修正后的可用scanf写法参考:

scanf("%99[^\n]%*c", str);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:18:04