strcmp函数在另一个函数中的返回值

时间:2018-12-30 04:19:22

标签: c strcmp

我知道strcmp返回什么,但是我不知道这段代码返回什么。

首先我有这个功能:

static int match_str(const void *str1, const void *str2)
{

  return !strcmp((const char *)str1, (const char *)str2); 
//if not equal return 1. 
}

然后我有这个

if (match_str) return 1; // not equal so return 
else{  my code goes on} // equal so continue

我不明白的是,如果str1等于str2,match_str应该返回0。然后代码继续前进。

但它添加了“!”操作员。看起来如果它们等于strcmp = 0,它将返回到“!0”,这意味着“!0 = 1”。但是如果返回到1,则似乎相等。它将停止。

实际上,如果它们相等,它将继续。

我真的感到困惑,为什么“ return!strcmp”而不是“ return strcmp”有效,所以使用“!”的目的是什么?在这里。

谢谢

1 个答案:

答案 0 :(得分:1)

来自C标准## 6.5.3.3p5

  

5逻辑求反运算符的结果!如果其操作数的值比较不等于0,则为0;如果其操作数的值比较等于0,则为1。结果的类型为int。表达式!E等效于(0 == E)。

>> What I don't understand is if str1 equals to str2, the match_str should returns 0. and then the code moves on.

由于在返回语句(!中将strcmpreturn !strcmp(.....)一起使用,match_str()将返回1,如果字符串与{{1 }},如果它们不匹配。

0

如果字符串匹配,>> I really confused why " return !strcmp " works rather than "return strcmp", what is the purpose of using '!' here.返回strcmp(),如果不匹配,则返回非零值,因为它按字典顺序比较两个以空值结尾的字符串。函数0的作者实际上想在字符串匹配的情况下返回match_str(),并且考虑到这一点,他/他已经给函数命名了(1)。 match_str函数的调用者在使用match_str()函数时应该意识到这一点。

match_str()