-2

可能重复:
为什么 strcmp() 在其输入相等时返回 0?
当字符串相等时 strcmp 导致 false

我真的不明白为什么函数检查返回真!!!我使用 strcmp 来比较 char[] 指针(hello)和字符数组“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;
}
4

2 回答 2

4

I really can´t get why the function check return true!!!

有趣的是,在原始的基本 C 代码中没有“真”或“假”(或“布尔”),不包括一些额外的头文件(如 stdbool.h)......但我离题了......

它没有返回真实。阅读手册strcmp()。您可以man 3 strcmp在 Linux 上执行此操作,也可以在谷歌搜索“man strcmp”。

手册会告诉你函数的返回值是:

...如果发现 s1(或其前 n 个字节)分别小于、匹配或大于 s2,则为小于、等于或大于零的整数。

请记住,对于条件检查,所有非 0 的整数值都将被视为“真”。也就是说,在这段代码中:

if(strcmp(word, "bar"))

任何不是“bar”的词都将是“true”。你想要的匹配是它是否等于零:

if(strcmp(word, "bar") == 0)

旁注,如果你要像你一样在全局范围内声明一些东西

char pointer[] = "hello";  

不需要将其传递给函数,您可以全局访问它,这就是全局的要点。然而,全球人通常不被接受。

于 2013-01-30T01:38:40.973 回答
3

0如果字符串相等,strcmp返回。

你的条件应该被否定:

if(!strcmp( word , "bar"))
    return true;

或比较0

if(strcmp( word , "bar") == 0)
    return true;
于 2013-01-30T00:29:27.307 回答