【问题标题】:Pointers in C. Why the function isn´t working? [duplicate]C 中的指针。为什么该函数不起作用? [复制]
【发布时间】:2013-01-30 00:27:09
【问题描述】:

可能重复:
Why does strcmp() return 0 when its inputs are equal?
strcmp results in false when strings are equal

我真的不明白为什么函数检查返回真!!!我使用 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;
}

【问题讨论】:

标签: c function pointers


【解决方案1】:

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

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

它没有返回 true。阅读strcmp() 上的手册。您可以在 Linux 上通过man 3 strcmp 执行此操作,或者只需在谷歌搜索“man strcmp”。

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

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

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

if(strcmp(word, "bar"))

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

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

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

char pointer[] = "hello";  

不需要传递给函数,可以全局访问,这就是全局的点。但是,全局变量通常不受欢迎。

【讨论】:

    【解决方案2】:

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

    你的条件应该被否定:

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

    或与0比较:

    if(strcmp( word , "bar") == 0)
        return true;
    

    【讨论】:

      猜你喜欢
      • 2015-12-09
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多