Diferencia entre <string.h> y <strings.h>

90

Noté que había (al menos en Mac OS X) tanto un <string.h>encabezado como un <strings.h>encabezado. man 3 stringrevela que contienen diferentes funciones. Hay alguna razón para esto?

icktoofay
fuente
2
Por lo que vale, OS X strings.hcontiene funciones no estándar bcmp bcopy bzero ffs index rindex strcasecmp strncasecmp... y eso es todo.
Potatoswatter
3
@Potatoswatter: Está haciendo exactamente lo que especifica POSIX.
R .. GitHub DEJA DE AYUDAR A ICE

Respuestas:

114

strings.h proviene de la rama BSD en la evolución de Unix. Su contenido ha sido estandarizado por POSIX, pero la mayor parte está marcado como heredado y puede reemplazarse fácilmente con otras funciones:

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);
Un programador
fuente
4
Algunas bibliotecas estándar de C han fusionado las funciones no obsoletas de strings.hen string.h. Véase, por ejemplo, Glibc .
entropo
19

Por <strings.h>lo general, solo agrega algunas funciones de cadena adicionales útiles pero no estándar al encabezado estándar <string.h>. Para una máxima portabilidad, solo debe usar, <string.h>pero si necesita las funciones en <strings.h>más de lo que necesita portabilidad, puede usar en <strings.h>lugar de <string.h>.

Paul R
fuente
1
Yo cuestionaría la descripción de estas funciones como "útiles". La mayoría de ellos son feos duplicados BSD de funciones estándar ANSI / ISO C con diferentes nombres. Las funciones de comparación que no distinguen entre mayúsculas y minúsculas para cadenas de bytes (en un sentido de confiabilidad multiplataforma) probablemente no sean útiles en cadenas UTF-8 modernas, e incluso si "funcionan", probablemente no proporcionen la semántica que el programador desea. Solo ffses posible que sea útil.
R .. GitHub DEJA DE AYUDAR A ICE
4
@R .: son útiles si tiene código BSD heredado para compilar que usa estas funciones. ;-)
Paul R