Strcmp не сравнивает строки правильно

Поэтому у меня есть это (не полный код)

char list[1000][10];

strcpy(list[0],"ab");

printf("%d\n",strcmp(list[0],"ab"));

и strcmp возвращает 0. Может ли кто-нибудь объяснить, почему он это делает?

Заранее спасибо.

6 ответов

Метод strcmp вернет 0, если в этом случае list[0] содержит "ab".

Он возвращает:

Возвращает интегральное значение, указывающее связь между строками:

Нулевое значение указывает, что обе строки равны.

Значение больше нуля указывает на то, что первый символ, который не совпадает, имеет большее значение в str1, чем в str2; И значение, меньшее нуля, указывает на противоположное.


Как упоминалось Даниэлем, значение returnd равно 0.

Взято с cplusplus.com

Возвращает интегральное значение, указывающее взаимосвязь между строками: нулевое значение указывает, что символы, сравниваемые в обеих строках, образуют одну и ту же строку. Значение больше нуля указывает на то, что первый символ, который не совпадает, имеет большее значение в str1, чем в str2; И значение, меньшее нуля, указывает на противоположное.

Вы также должны работать с strncmp а не с strcmp.


Поскольку strcpy() - это функция, которая копирует "правую" строку в "левую" строку. Итак, после strcpy(list[0],"ab"); , содержимое list[0] равно "ab". Затем они равны строкам, а strcmp возвращает 0, что означает "равно".


strcmp() выполняет порядковое сравнение строк, а не тест равенства. Возвращаемое значение 0 означает, что строки равны!

Если вы хотите проверить равенство, используйте этот шаблон:

if (strcmp(s, "ab") == 0) {
 // strings are equal
}


Ваша строка соответствует, поэтому возвращается 0, вот так...

char list[1000][10];

 strcpy(list[0],"ab");
 if(strcmp(list[0],"ab")==0)
 printf("Matched\n",);


strmp возвращает 0, когда строки совпадают. Если я чего-то не упускаю, он будет вести себя так, как ожидалось.

см.: http://www.tutorialspoint.com/ansi_c/c_strcmp.htm

licensed under cc by-sa 3.0 with attribution.