这个codenippet让我困惑:
/* First off, we need to check if this is a call for the "example-handler" handler.
* If it is, we accept it and do our things, if not, we simply return DECLINED,
* and the server will try somewhere else.
*/
if (!r->handler || strcmp(r->handler, "example-handler")) return (DECLINED);
它说:“检查这是否是对”example-handler“处理程序的调用。如果不是,我们只返回DECLINED ,”
我认为“if(strcmp(r-> handler;”example-handler“))return(DECLINED)”意味着如果字符串比较返回true,那么如果它是对example-handler的调用, DECLINED将被退回。
答案 0 :(得分:2)
本声明
if (!r->handler || strcmp(r->handler, "example-handler")) return (DECLINED);
装置
如果r->处理程序等于NULL,则返回DECLINED
或者如果r->处理程序不等于NULL但它的内容不等于字符串文字“example-handler”,那么也返回DECLINED
标准C函数strcmp
如果两个操作数彼此相等则返回0,否则返回非零值。
那个表达
strcmp(r->handler, "example-handler") != 0
表示操作数彼此不相等。
来自C标准
strcmp函数返回一个大于,等于的整数,或者 小于零,因此s1指向的字符串更大 比,等于,或者小于s2指向的字符串
答案 1 :(得分:0)
看起来很正确。 strcmp
如果匹配则返回0。因此,您将继续评论建议。
答案 2 :(得分:0)
这个条件:
if (!r->handler || strcmp(r->handler, "example-handler")) return (DECLINED);
可以更明确地重写为:
if (r->handler == NULL /* or nullptr in C++11 */ || strcmp(r->handler, "example-handler") != 0) return (DECLINED);
这基本上意味着它在以下情况下返回DECLINED:
在strcmp的手册页中,你可以发现strcmp在字符串不同时返回非零值:
strcmp()函数比较两个字符串s1和s2。如果找到s1,则返回小于,等于或大于零的整数,小于,匹配或大于s2。