当我调用C字符串比较函数时,如下所示:
strcmp("time","time")
它返回0,这意味着字符串不相等.
任何人都可以告诉我为什么C实现似乎这样做?我认为如果相等,它将返回非零值.我很好奇我看到这种行为的原因.
strcmp返回一个词汇差异(或者我应该把它称为"短路串行字节比较器"?:-))你给出的两个字符串作为参数.0表示两个字符串相等
正值意味着s1将在字典中的s2之后.
负值意味着s1将在字典中的s2之前.
因此,当比较明显不同的"时间"和"金钱"时,你的非零值,即使有人会说时间就是金钱!:-)
你可以说,像这样的实现的好处是
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的比较与暗示中的比较完全匹配.
函数通常为常见 - 或者一种情况 - 返回零,对于特殊情况则为非零.采用main函数,通常在成功时返回零,并且在失败时返回一些非零值.精确的非零值表示出了什么问题.例如:内存不足,没有访问权限或其他内容.
在你的情况,如果字符串相等,则没有理由为什么它比字符串包含相同的字符等于其他.但如果它们不相等,那么第一个可以更小,或者第二个可以更小.让它返回1表示相等,0表示较小,2表示较大,我认为会有点奇怪.
你也可以用减法来思考它:
return = s1 - s2
如果s1是"按字典顺序"减去,那么它将给出一个负值.