C中的指针为什么功能不起作用?

时间:2013-01-30 00:27:10

标签: c function pointers

  

可能重复:
  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;
}

2 个答案:

答案 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;