C: Различия между strchr() и index()

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

Посмотрев в manpages, я нашел, в строке (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 в строку на которые указывает s. Конечный нулевой символ считается частью строка; поэтому, если c - '\ 0', то функции располагают завершающим '\ 0'.

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

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

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

Ответ 1

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

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

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

Ответ 2

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