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

C语言strcmp比较char数组与char*字符串结果异常的原因及解决方法

你的strcmp结果异常的原因及解决办法

咱们来一步步拆解你遇到的问题:你预期strcmp(a, b[0])返回0,但实际得到了一个奇怪的负数,核心原因大概率是以下两个点之一:

1. 字符串缺少关键的终止符'\0'

C语言里的字符串必须以'\0'(空字符)结尾,strcmp函数会一直比较到遇到这个终止符为止。虽然你写了char a[100] = "\0";,这行代码原本会把数组所有元素初始化为'\0',但之后你给a[0]和a[1]赋值了'x'和'y'——结合你提到的电脑存在异常,有可能数组后续的'\0'被意外覆盖,此时a就变成了没有终止符的字符序列,strcmp会越界读取内存,返回随机的异常值。

2. 忘记包含<string.h>头文件

这是很多C语言新手容易踩的坑:如果调用strcmp却没有在代码开头包含<string.h>,编译器会默认假设这个函数的返回值是int,但实际函数的调用逻辑会因为缺少原型声明而被错误处理。在MSVC环境下,这种情况就可能返回0xCCCCCCCC(也就是你看到的-858993460),这是编译器标记未初始化栈内存的特殊值。


解决办法

  • 手动确保字符串终止:在给a赋值后,主动加上终止符,彻底避免终止符缺失的问题:
    a[0] = 'x';
    a[1] = 'y';
    a[2] = '\0'; // 手动添加终止符,确保字符串合法
    
  • 必须包含头文件:在代码最开头加上,让编译器正确识别strcmp的函数原型:
    #include <string.h>
    
  • 检查初始化逻辑:确认a的初始化没有问题,char a[100] = "\0";是正确的初始化方式,但如果是局部变量,绝对不要省略初始化(比如不要写成char a[100];,未初始化的局部数组元素都是随机值)。

这样修改后,strcmp(a, b[0])应该就能返回预期的0了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:36:25