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

strcmp()函数返回值与预期不符,求解析其工作原理

关于strcmp()返回值的疑问解答

核心误区:你搞反了字符串的比较逻辑

你认为"dogs" < "bark"是错误的,strcmp的字符串比较遵循字符ASCII码值的逐位对比规则,而非日常词汇排序或长度判断。

逐字符对比"dogs"和"bark":

  • 第一个字符:'d'的ASCII值是100,'b'的ASCII值是98
  • 由于100 > 98,strcmp在第一个字符就得出结果,返回'd' - 'b' = 2,这就是你看到返回值为2的原因。

strcmp()的真正工作原理

strcmp从两个字符串的首字符开始,按顺序逐字符对比:

  • 若当前字符不相等,立即返回第一个不同字符的ASCII差值(即string_A字符值 - string_B字符值)
  • 若所有对应字符都相等,直到其中一个字符串结束,则返回两个字符串的长度差值(比如"dog"和"dogs"会返回-3)
  • 只有当两个字符串完全相同时,才返回0

注意:C标准仅规定返回值的正负性(>0、<0、=0),具体数值并非固定,不同编译器、平台可能返回不同的差值,你不能依赖返回的具体数字,只能通过符号判断大小关系。

你的代码验证

你的代码运行结果完全符合strcmp规范:

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

int main() {
     char string[] = "dogs";
     char compare[] = "bark";

     int result = strcmp(string, compare);

     printf("int result = %d\n", result);
}

若要让strcmp返回负数,只需将string改为ASCII值整体小于"bark"的字符串,比如"apple"(首字符'a'的ASCII值97 < 'b'的98)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:48:13