web-dev-qa-db-fra.com

Différence entre string.h et strings.h

J'ai remarqué qu'il y avait (au moins sur Mac OS X) à la fois un string.h en-tête et un strings.h entête. man 3 string révèle qu'ils contiennent différentes fonctions. Y a-t-il une raison quelconque pour cela?

86
icktoofay

strings.h vient de la branche BSD dans l'évolution unix. Son contenu a été normalisé par POSIX, mais la plupart d'entre eux sont marqués comme hérités et peuvent être facilement remplacés par d'autres fonctions:

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);
106
AProgrammer

Généralement <strings.h> ajoute simplement des fonctions de chaîne supplémentaires utiles mais non standard à l'en-tête standard <string.h>. Pour une portabilité maximale, vous ne devez utiliser que <string.h> mais si vous avez besoin des fonctions de <strings.h> plus que ce dont vous avez besoin de portabilité, vous pouvez utiliser <strings.h> au lieu de <string.h>.

17
Paul R