可能重复:
Why does strcmp() return 0 when its inputs are equal?
strcmp results in false when strings are equal
我真的不明白为什么函数检查返回true !!!我使用strcmp比较char []指针(hello)和chars“bar”数组。
bool check(const char* word);
char pointer[] = "hello";
int main (void)
{
bool answer = check(pointer) ;
if(answer == true)
printf("true");
else
printf("false");
return 0;
}
bool check(const char* word)
{
printf(" word = %s ", word);
if(strcmp( word , "bar"))
return true;
else
return false;
}
答案 0 :(得分:4)
I really can´t get why the function check return true!!!
有趣的是,在原始基本C代码中没有“true”或“false”(或“bool”),包括一些额外的头文件(如stdbool.h)......但我离题了..
它没有回归真实。阅读strcmp()
上的手册。您可以在Linux上通过man 3 strcmp
执行此操作,或者只需谷歌搜索“man strcmp”。
本手册将告诉您该功能的返回值为:
...如果发现s1(或其前n个字节)分别小于,匹配或大于s2,则小于,等于或大于零的整数。
请记住,对于条件检查,所有非0的整数值都将被视为“true”。所以这就是代码:
if(strcmp(word, "bar"))
任何 不 “bar”的字词都将为“true”。你想要匹配的是它是否等于零:
if(strcmp(word, "bar") == 0)
char pointer[] = "hello";
不需要将它传递给函数,您可以全局访问它,这是全局的要点。然而,全球人士通常不赞成。
答案 1 :(得分:3)
strcmp会返回0
。
你的条件应该被否定:
if(!strcmp( word , "bar"))
return true;
或与0
比较:
if(strcmp( word , "bar") == 0)
return true;