当字符串为空时,这是一个strcmp返回false的好方法

veh*_*zzz 0 c c++ strcmp

我想要另一个条件 - 仍然保持快速执行时间但更安全 - 如果其中一个或两个字符串为空,我返回false:

int speicial_strcmp(char *str1, char* str2 )
{

    if(*str1==*str2 =='\0')
         return 0;

     return strcmp(str1,str2);

}
Run Code Online (Sandbox Code Playgroud)

jal*_*alf 12

不,这不是一个好方法,因为它不起作用.

if(*str1==*str2 =='\0')
Run Code Online (Sandbox Code Playgroud)

将被评估为:

bool tmp1 = *str1==*str2;
bool tmp2 = tmp1 == '\0';
if (tmp2)
Run Code Online (Sandbox Code Playgroud)

换句话说,因为bool将被提升为一个整数,只要字符串以不同的字符开头,你的测试就会返回true(tmp1将为false,将转换为0,因此tmp2变为true)

不要试图超越编译器.编写快速代码不是为了编写尽可能少的代码行,甚至是尽可能短的代码行.即使==以这种方式链接在一起是有意义的,也没有理由为什么它会更快.只需编写您理解的代码,并且可以正确编写.