Я заметил, что был (по крайней мере, в Mac OS X) заголовок string.h
и заголовок strings.h
. man 3 string
показывает, что они содержат разные функции. Есть ли причина для этого?
Разница между string.h и strings.h
Ответ 1
strings.h происходит из ветки BSD в эволюции unix. Его контент был стандартизован POSIX, но большая его часть отмечена как наследие и может быть легко заменена другими функциями:
int bcmp(const void *, const void *, size_t); /* LEGACY, see memcmp */
void bcopy(const void *, void *, size_t); /* LEGACY, see memcpy, memmove */
void bzero(void *, size_t); /* LEGACY, see memset */
int ffs(int);
char *index(const char *, int); /* LEGACY, see strchr */
char *rindex(const char *, int); /* LEGACY, see strrchr */
int strcasecmp(const char *, const char *);
int strncasecmp(const char *, const char *, size_t);
Ответ 2
Обычно <strings.h>
просто добавляет некоторые полезные, но нестандартные дополнительные строковые функции в стандартный заголовок <string.h>
. Для максимальной переносимости вы должны использовать только <string.h>
, но если вам нужны функции в <strings.h>
больше, чем вам нужна переносимость, вы можете использовать <strings.h>
вместо <string.h>
.