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

_stricmp字符串比较不符合预期,请求技术排查

问题分析与解决办法

哦,这个坑我刚学C的时候也踩过!问题的核心在于**fgets()会把输入末尾的换行符\n也一并读取到字符串里**,而你定义的test数组里只有"boy"(末尾是字符串结束符\0),两者内容不一致,所以_stricmp自然会返回非0值,判断为不相等。

举个具体的例子:当你输入boy然后按下回车键,test2数组里实际存储的内容是:'b' 'o' 'y' '\n' '\0',而test里是'b' 'o' 'y' '\0'——多出来的那个\n就是导致比较失败的罪魁祸首。

解决方法:去掉换行符

最简单且安全的方式是用strcspn()函数直接截断换行符,这个方法不管输入时有没有换行符(比如输入长度刚好填满缓冲区的情况)都能正常工作:

#include <stdio.h>
#include <string.h>

int main() {
    char test[] = "boy";
    char test2[20];
    fgets(test2, 20, stdin);
    
    // 关键:用strcspn找到换行符的位置,替换为字符串结束符
    test2[strcspn(test2, "\n")] = '\0';
    
    if (_stricmp(test2, test) == 0) {
        printf("the same");
    } else {
        printf("Not");
    }
    return 0;
}

你也可以用另一种方式手动处理换行符,比如遍历字符串找到'\n'然后替换成'\0',但strcspn的写法更简洁高效。

另外补充一点:_stricmp是不区分大小写的字符串比较函数,所以输入Boy、BOY这类变体也能和test匹配,这部分是正常的,不用修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:29:14