Diferença entre <string.h> e <strings.h>

90

Percebi que havia (pelo menos no Mac OS X) um <string.h>cabeçalho e um <strings.h>cabeçalho. man 3 stringrevela que eles contêm funções diferentes. Existe alguma razão para isso?

icktoofay
fonte
2
Pelo que vale a pena, o OS X strings.hcontém funções fora do padrão bcmp bcopy bzero ffs index rindex strcasecmp strncasecmp... e é isso.
Potatoswatter
3
@Potatoswatter: Está fazendo exatamente o que é especificado pelo POSIX.
R .. GitHub PARAR DE AJUDAR O ICE

Respostas:

114

strings.h vem do ramo BSD na evolução unix. Seu conteúdo foi padronizado por POSIX, mas a maior parte dele é marcado como legado e pode ser facilmente substituído por outras funções:

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);
AProgrammer
fonte
4
Algumas bibliotecas padrão C fundiram as funções não obsoletas de strings.hem string.h. Veja, por exemplo, Glibc .
entropo
19

Normalmente, <strings.h>apenas adiciona algumas funções de string adicionais úteis, mas não padrão, ao cabeçalho padrão <string.h>. Para máxima portabilidade, você só deve usar, <string.h>mas se precisar das funções <strings.h>mais do que precisa de portabilidade, você pode usar em <strings.h>vez de <string.h>.

Paul R
fonte
1
Eu questionaria a descrição dessas funções como "úteis". A maioria deles são duplicatas BSD feias de funções ANSI / ISO C padrão com nomes diferentes. As funções de comparação que não diferenciam maiúsculas de minúsculas para strings de byte são (em um sentido de confiabilidade de plataforma cruzada) provavelmente não úteis em strings UTF-8 modernas e, mesmo que "funcionem", provavelmente não fornecem a semântica que o programador deseja. Só ffsé possivelmente útil.
R .. GitHub PARAR DE AJUDAR O ICE
4
@R .: eles são úteis se você tiver código BSD legado para compilar que usa essas funções. ;-)
Paul R