strcmp总是如此

Cel*_*tas 0 c++ strcmp

为什么if语句总是正确的?

char dot[] = ".";
char twoDots[] = "..";
cout << "d_name is " << ent->d_name << endl;
if(strcmp(ent->d_name, dot) || strcmp(ent->d_name, twoDots))
Run Code Online (Sandbox Code Playgroud)

我用strcmp错了吗?

hmj*_*mjd 10

strcmp()返回0时,字符串等于和字符串不能同时".""..".意味着一方的||总是非零,因此条件总是如此true.

纠正:

if(0 == strcmp(ent->d_name, dot) || 0 == strcmp(ent->d_name, twoDots))
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用std::string存储点变量并使用==:

#include <string>

const std::string dot(".");
const std::string twoDots("..");

if (ent->d_name == dot || ent->d_name == twoDots)
Run Code Online (Sandbox Code Playgroud)


moo*_*eep 7

strcmp()在差异的情况下返回非零值(因此评估为true).

另请查看文档(下面的链接).另外看看std::string哪个提供了这样operator==()的任务.见这个答案对于如何.


返回表示字符串之间关系的整数值:零值表示两个字符串相等.大于零的值表示不匹配的第一个字符在str1中的值大于在str2中的值; 小于零的值表示相反.


每个函数的返回值表示string1与string2的字典关系.

Value   Relationship of string1 to string2

 < 0    string1 less than string2
   0    string1 identical to string2
 > 0    string1 greater than string2
Run Code Online (Sandbox Code Playgroud)