C语言 关于0到1区间属于bool类型的true还是false?

问题遇到的现象和发生背景

最近在做牛客网的华为机试题,遇到了个白丝不得姐的问题,该题目可搜索:HJ14 字符串排序

问题相关代码,请勿粘贴截图

if(strcmp(str[j],str[j+1])>0) //这样写是对的
if(strcmp(str[j],str[j+1])) //这样写是错误的

我的解答思路和尝试过的方法

以下是strcmp相关的:
extern int strcmp(const char *s1,const char *s2);
规则
当s1<s2时,返回为负数;
当s1=s2时,返回值= 0;
当s1>s2时,返回正数。

if语句的判定条件非0即为真
问题就这么出现了:当s1>s2时,返回正数,即返回值>0,if判定应该为真啊.
可是if(strcmp(str[j],str[j+1])) 就是错误的

是我对概念理解错误了?
还是由于编译环境的原因出现的问题呢?
求姐

0就是false,其他都是true。

strcmp()返回值有负数,0和正数三种值。

if判断时非0为true,0为false

if(strcmp(str[j],str[j+1])>0) if判断的是用>号比较后的结果.
用>号比较后就是只有1(true)和0(false)两种结果,就是只有strcmp()返回正数时,if判断才成立, strcmp()返回0或负数时,if判断不成立.
而 if(strcmp(str[j],str[j+1])) if判断的直接就是strcmp()的返回值.
就是strcmp()返回正数或负数时,if判断都成立, 只有strcmp()返回0时,if判断才不成立.
也就是 if(strcmp(str[j],str[j+1])) 等同 if(strcmp(str[j],str[j+1]) != 0)
当 strcmp()返回负数时,两个if判断结果就不一样了

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

非0为true
0为false