как понять "return * test == '\ 0';" - PullRequest
0 голосов
/ 04 марта 2011

Есть фрагмент кода,

int matchhere(char *regexp, char  *text)
 {
    /* do sth */
    return    *test== '\0';
 }

Я не понимаю, что делает

return    *test== '\0';

означают. Или что это вернет? Как здесь работает "=="?

Ответы [ 8 ]

3 голосов
/ 04 марта 2011

сравнить *test с '\0', вернуть 0, если неравенство, вернуть 1, если равен.

2 голосов
/ 04 марта 2011

Часть *test читает первый символ для строки C (строка C - это просто набор символов, начинающихся с данного адреса, и оператор *foo просматривает этот адрес, который, как оказалось, содержит первый символ),По определению строка C заканчивается нулевым байтом ('\0' или просто 0).

Таким образом, это проверяет, является ли первый символ символом конца строки.Или другими словами: он проверяет, является ли строка пустой.Результат сравнения (1, если пустой, 0, если не пустой) возвращается.

1 голос
/ 04 марта 2011

Не удается скомпилировать, потому что «test» - это не то же самое, что «text», и потому что в C. такого типа нет Int.

Если бы опечатки были исправлены, он увидел бы,первая буква буфера, на которую указывает text, является символом NULL - т.е. она возвращает 1, если буфер пуст, и 0 в противном случае.

0 голосов
/ 04 марта 2011

Выражение

return *text == '\0';

эквивалентно

return text[0] == '\0';

, что также эквивалентно

return text[0] == 0;

В каждом случае сравнивается первый символстрока, указанная от text до 0, которая является ограничителем строки и возвращает результат сравнения.Это эквивалентно записи

if (*text == '\0') // or *text == 0, or text[0] == 0, or !*text, or !text[0]
  return 1;
else
  return 0;

Другим эквивалентом будет

return !*text; // or !text[0]

, который вернет 0, если *text не ноль, 1 в противном случае, но это раздвигает границы хорошего вкуса,

0 голосов
/ 04 марта 2011

*test представляет первый символ строки.

== - оператор равенства.

'\0' - это нулевой символ, который в C представляет конец строки.

*test== ‘\0’ - логическое выражение, которое возвращает истину всякий раз, когда строка пуста.

Вся инструкция возвращает этот логический результат вызывающей стороне.

0 голосов
/ 04 марта 2011

Он проверяет, является ли *test пустой строкой, в этом случае возвращает отличное от нуля значение

0 голосов
/ 04 марта 2011

*test означает содержимое указателя test, который char.

*test == '\0' просто сравнивает этот символ с нулевым символом.

return *test == '\0'означает возвращать результат этого сравнения.

Таким образом, если test указывает на нулевой символ, то matchhere() вернет true, иначе false.

0 голосов
/ 04 марта 2011

Проверяет, равен ли символ, на который указывает указатель text, символ '\0' (символ конца строки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...