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

strcmp返回false,含空格字符串搜索未匹配问题求助

问题原因分析

核心问题:scanf("%s")的读取限制

  • scanf的%s格式符碰到空白字符(空格、换行、制表符)就会停止读取。当你输入“top hat”时,strin里只会存储"top",空格和后面的"hat"根本没被读入数组。用strcmp拿"top"和"top hat"对比,自然不相等,所以输出“not found”。

额外需要注意的细节

  • scanf("%s", &strin);里的&strin写法有误:数组名strin本身就是指向首元素的指针,正确写法应为scanf("%s", strin);,这个错误当前未影响运行,但不符合C语言规范。
  • 字符串数组numbers[6][10]的第二个维度是10,"top hat"(算上空格和终止符共8个字符)刚好能放下,但如果后续添加更长的字符串,可能会出现缓冲区溢出,建议根据实际需求调整数组大小。

修复方法

要读取带空格的字符串,把scanf替换成fgets即可:

fgets(strin, MAX_LIMIT, stdin);
// fgets会把输入末尾的换行符也读进来,需要手动去除
size_t len = strlen(strin);
if (len > 0 && strin[len-1] == '\n') {
    strin[len-1] = '\0';
}

这样输入“top hat”时,整个字符串会被完整读入strin,strcmp就能匹配成功,输出“found”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:10:17