C: Различия между strchr () и index () - PullRequest
15 голосов
/ 04 ноября 2010

Я делаю что-то в C, что требует использования строк (как и большинство программ).

Глядя на страницы, которые я нашел, на строку (3):

СИНТАКСИС

#include <strings.h>

char * index(const char *s, int c)

(...)

#include <string.h>

char * strchr(const char *s, int c)

Так что я с любопытством посмотрел и на strchr (3), и на индекс (3) ...

И я обнаружил, что оба делают следующее:

Функция strchr () / index () находит первое вхождение c в строке указал на с. Завершающий нулевой символ считается частью строка; следовательно, если c равно '\ 0', функции находят завершающий '\ 0'.

Итак, man-страница - это в основном копия и вставка.

Кроме того, я полагаю, что из-за некоторой запутанной необходимости второй параметр имеет тип int, но на самом деле char. Я думаю, что я не ошибаюсь, но может кто-нибудь объяснить мне, почему это int, а не char?

Если они оба одинаковые, какая из них более совместима между версиями, а если нет, то какая разница?

Ответы [ 2 ]

23 голосов
/ 04 ноября 2010

strchr() является частью стандартной библиотеки C. index() является устаревшей функцией POSIX. Спецификация POSIX рекомендует использовать index() в качестве макроса, который расширяется до вызова strchar().

Поскольку index() устарело в POSIX и не является частью стандартной библиотеки C, вам следует использовать strchr().

Второй параметр имеет тип int, поскольку в C символьные константы (например, 'a') имеют тип int.

2 голосов
/ 04 ноября 2010

Похоже, что функция index () является более старой, и ее следует заменить на strchr ().См. http://www.opengroup.org/onlinepubs/000095399/functions/index.html, где они предлагают заменить index на strchr и пометить index как устаревшую функцию.

...