-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 など) を含めないと、"true" または "false" (または "bool") はありません... しかし、私は脱線します..

それは真を返しません。でマニュアルをお読みくださいstrcmp()。これはman 3 strcmp、Linux または Google 検索「man strcmp」で実行できます。

マニュアルでは、関数の戻り値は次のようになります。

... s1 (またはその最初の n バイト) がそれぞれ s2 より小さい、一致する、または大きい場合、0 より小さい、等しい、または大きい整数。

条件付きチェックでは、0 以外のすべての整数値が「真」と見なされることに注意してください。つまり、このコードでは次のようになります。

if(strcmp(word, "bar"))

"bar" 以外の単語は" true" になります。一致に必要なのは、ゼロに等しい場合です。

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

サイドノート、あなたがそうするようにグローバルスコープで何かを宣言しようとしているなら

char pointer[] = "hello";  

関数に渡す必要はありません。グローバルにアクセスできます。これがグローバルのポイントです。ただし、グローバルは一般的に嫌われています。

于 2013-01-30T01:38:40.973 に答える
3

strcmp0は、文字列が等しい場合に返します。

あなたの条件は否定されるべきです:

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

または比較0:

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