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
相关产品推荐
相关产品推荐

