为什么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)
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)