возвращаемое значение функции == 0? - PullRequest
1 голос
/ 23 декабря 2011

Хорошо, у меня есть следующая функция:

int functionX()
{
  return strcmp(array1,array2)==0;
}

Зачем кому-то это делать? == 0 предполагает, что эта функция всегда возвращает FALSE. Это правда или мне не хватает некоторых экзотических синтаксических праймеров Си?

Ответы [ 6 ]

1 голос
/ 23 декабря 2011

Здесь нет ничего экзотического ... вы возвращаете результат выражения strcmp(array1, array2)==0, который сравнивает результат strcmp с 0 и возвращает 1, если они сравниваются равными, 0, если они разные.

В общем, functionX вернет 1, если результат strcmp равен 0 (то есть, если две сравниваемые строки равны), в противном случае 0.

1 голос
/ 23 декабря 2011

strcmp() возвращает целое число, равное 0, если две строки эквивалентны, в противном случае - не ноль.

Эта функция просто «инвертирует» результат, в том смысле, что она вернет 1, если результат равен 0 или 0, если результат не равен нулю. В C все, что не равно 0, считается «истинным», поскольку нет реального логического типа (кроме C99).

1 голос
/ 23 декабря 2011

strcmp() возвращает 0, если его два аргумента сравниваются равными. В вашем примере functionX() возвращает "true", если array1 и array2 сравниваются равными.

1 голос
/ 23 декабря 2011

(strcmp(array1, array2) == 0) - это выражение, которое оценивает strcmp(), которое может возвращать отрицательное, положительное или нулевое число. Когда две строки совпадают, strcmp() возвращает 0.

== 0 сравнивает возвращаемое значение strcmp() с 0. Вы должны использовать это в случае, когда вам нужно functionX(), чтобы вернуть «истинное» (ненулевое) значение, когда две строки совпадают. В частности, strcmp(array1,array2)==0 вернет 1 в этом случае или 0 в противном случае.

Дополнительную информацию о strcmp() можно получить на справочной странице .

.
0 голосов
/ 23 декабря 2011

Сравнение с нулем - это то же самое, что отрицание логического выражения, поскольку в C вы используете целые числа в качестве логических значений.Так что

return strcmp(array1,array2)==0;

- это то же самое, что и

return !strcmp(array1,array2) ;

Поскольку strcmp возвращает ноль только в том случае, если обе строки равны, тогда выражение будет возвращать true, если строки равны.

0 голосов
/ 23 декабря 2011

Эта конструкция сравнивает результат strcmp с 0 и возвращает результат сравнения

...