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