strcmp总是如此

时间:2012-08-17 21:07:18

标签: 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))

我使用strcmp错了吗?

5 个答案:

答案 0 :(得分:10)

当字符串相等且字符串不能同时为0"."时,

strcmp()会返回".."。意味着||的一侧始终为非零,因此条件始终为true

要更正:

if(0 == strcmp(ent->d_name, dot) || 0 == strcmp(ent->d_name, twoDots))

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

#include <string>

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

if (ent->d_name == dot || ent->d_name == twoDots)

答案 1 :(得分:7)

如果存在差异,

strcmp()将返回非零值(因此评估为true)。

另请查看文档(下面的链接)。另请查看std::string,为此类任务提供operator==()。有关 的方式,请参阅this answer


  

返回一个表示字符串之间关系的整数值:   零值表示两个字符串相等。   大于零的值表示不匹配的第一个字符在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

答案 2 :(得分:3)

如果字符串按字典顺序排在先前,相等或稍后,则

strcmp返回-1,0或1。

要检查字符串是否相等,请使用strcmp(s1, s2) == 0

答案 3 :(得分:0)

由于strcmp在相等时返回0而在1 or -1不同时返回,因此两个strcmp中至少有一个返回1 or -1||将返回true当任何条件与0不同时,你应该这样做......

if(strcmp(ent->d_name, dot) == 0 || strcmp(ent->d_name, twoDots) == 0)

我在每次strcmp后添加了== 0

答案 4 :(得分:0)

strcmp本身不返回布尔值。而是返回一个int。如果匹配则为0,否则为其他。因此,这应该有所帮助:

if(0 == strcmp(d_name, dot) || 0 == strcmp(d_name, twoDots)) {
    // Other code here
}