2

編集:投稿の両方の方法を反映するようにタイトルを変更しました。

以下のようにC言語で2つの文字列を比較しようとしていますが、何らかの理由で、両方の文字列が等しくないことが常に出力されます

#include <stdio.h>
#include <string.h>


int main()
{
    /* A nice long string */

    char test[30]="hellow world";

    char test2[30];

    // to copy string from first array to second array

    strcpy(test2, test);



    /* now comparing two stering*/

    if(strcmp(test2, test))
       printf("strigs are equal  ");
    else

    printf("not equal  \n");

    printf("value of first string  is %s and second string is %s",test,test2);
    printf("length of string1 is %zu and other string is %zu ",strlen(test2),strlen(test2));



}

私は常に出力を取得しています

not equal  
value of first string  is hellow world and second string is hellow worldlength of string1 is 12 and other string is 12 
4

7 に答える 7

11

あなたの問題は、あなたの使い方にありますstrcmpstrcmp文字列が等しい場合は 0 (false として評価) を返します (文字列が「順序どおり」の場合は正の数を返し、「順序が正しくない」場合は負の数を返します)。

于 2012-04-25T18:25:42.100 に答える
6

2 つの文字列が同じ場合、 strcmpは 0 を返し、0 は C では false と評価されます。試してください:

if(strcmp(test2, test)==0)
于 2012-04-25T18:26:00.040 に答える
4

C++ リファレンスによると Return value of strcmp -A zero value indicates that both strings are equal. -A value greater than zero indicates that the first character that does not match has a greater value in str1 than in str2; And a value less than zero indicates the opposite.

条件を変更するif(!strcmp(test2, test))と、うまくいくはずです。

于 2012-04-25T18:27:07.217 に答える
2

strcmp()等しい場合は 0 を返します

于 2012-04-25T18:27:08.647 に答える
2

文字列が等しい場合、strcmp() は 0 を返します。たとえば、http://www.cplusplus.com/reference/clibrary/cstring/strcmp/を参照してください。

于 2012-04-25T18:26:15.877 に答える
1

strcmp指定された 2 つの文字列が等しい場合は 0 を返します。

また、いくつかのスペルミスを修正しました。最後に2 回printf()お電話いただきました。strlen(test2)- それも修正

#include <stdio.h>
#include <string.h>

int main()
{
    /* A nice long string */

    char test[30]="hello world";

    char test2[30];

    // to copy string from first array to second array

    strcpy(test2, test);

    /* now comparing two stering*/

    if(!strcmp(test2, test))
        printf("strigs are equal \n");
    else
        printf("not equal  \n");

    printf("value of first string is %s \nsecond string is %s \n", test, test2);
    printf("length of string1 is %zu \nsecond string is %zu \n",strlen(test), strlen(test2));

    return 0;
}

出力:

$ ./a.out 
strigs are equal 
value of first string is hello world 
second string is hello world 
length of string1 is 11 
second string is 11 
$ 
于 2012-04-25T18:29:53.330 に答える
1

man strcmp: 「strcmp() 関数は 2 つの文字列 s1 と s2 を比較します。s1 がゼロより小さい、等しい、または大きい場合、それぞれ 0 より小さい、等しい、または大きい整数を返します。 s2.」

于 2012-04-25T18:34:19.193 に答える