当前位置:  开发笔记 > 编程语言 > 正文

为什么strcmp()在输入相等时返回0?

如何解决《为什么strcmp()在输入相等时返回0?》经验,为你挑选了3个好方法。

当我调用C字符串比较函数时,如下所示:

strcmp("time","time")

它返回0,这意味着字符串不相等.

任何人都可以告诉我为什么C实现似乎这样做?我认为如果相等,它将返回非零值.我很好奇我看到这种行为的原因.



1> Benoît..:

strcmp返回一个词汇差异(或者我应该把它称为"短路串行字节比较器"?:-))你给出的两个字符串作为参数.0表示两个字符串相等

正值意味着s1将在字典中的s2之后.

负值意味着s1将在字典中的s2之前.

因此,当比较明显不同的"时间"和"金钱"时,你的非零值,即使有人会说时间就是金钱!:-)


strcmp()不进行词法比较,它只是比较每个字符的值,直到存在差异或两个字符串终止.

2> Daniel LeChe..:

你可以说,像这样的实现的好处是

if(strcmp(, ) > 0)   // Implies stringA > stringB
if(strcmp(, ) == 0)  // Implies stringA == stringB
if(strcmp(, ) < 0)   // Implies stringA < stringB
if(strcmp(, ) >= 0)  // Implies stringA >= stringB
if(strcmp(, ) <= 0)  // Implies stringA <= stringB
if(strcmp(, ) != 0)  // Implies stringA != stringB

注意与0的比较与暗示中的比较完全匹配.



3> Johannes Sch..:

函数通常为常见 - 或者一种情况 - 返回零,对于特殊情况则为非零.采用main函数,通常在成功时返回零,并且在失败时返回一些非零值.精确的非零值表示出了什么问题.例如:内存不足,没有访问权限或其他内容.

在你的情况,如果字符串相等,则没有理由为什么它比字符串包含相同的字符等于其他.但如果它们不相等,那么第一个可以更小,或者第二个可以更小.让它返回1表示相等,0表示较小,2表示较大,我认为会有点奇怪.

你也可以用减法来思考它:

return = s1 - s2

如果s1是"按字典顺序"减去,那么它将给出一个负值.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有