Differenza tra <string.h> e <strings.h>


90

Ho notato che c'erano (almeno su Mac OS X) sia <string.h>un'intestazione che <strings.h>un'intestazione. man 3 stringrivela che contengono funzioni diverse. c'è qualche ragione per questo?


2
Per quello che vale, OS X strings.hcontiene funzioni non standard bcmp bcopy bzero ffs index rindex strcasecmp strncasecmp... e basta.
Potatoswatter

3
@ Potatoswatter: sta facendo esattamente ciò che è specificato da POSIX.
R .. GitHub SMETTA DI AIUTARE IL GHIACCIO

Risposte:


114

strings.h proviene dal ramo BSD nell'evoluzione di unix. Il suo contenuto è stato standardizzato da POSIX, ma la maggior parte è contrassegnato come legacy e può essere facilmente sostituito con altre funzioni:

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

4
Alcune librerie standard C hanno unito le funzioni non deprecate di strings.hinto string.h. Vedi, ad esempio, Glibc .
entropo

19

In genere <strings.h>aggiunge solo alcune funzioni stringa aggiuntive utili ma non standard all'intestazione standard <string.h>. Per la massima portabilità dovresti usare solo, <string.h>ma se hai bisogno delle funzioni in <strings.h>più di quanto ti serve la portabilità, puoi usare <strings.h>invece di <string.h>.


1
Metterei in dubbio la descrizione di queste funzioni come "utili". La maggior parte di loro sono brutti duplicati BSD di funzioni ANSI / ISO C standard con nomi diversi. Le funzioni di confronto senza distinzione tra maiuscole e minuscole per le stringhe di byte sono (in un senso di affidabilità multipiattaforma) probabilmente non utili sulle moderne stringhe UTF-8, e anche se "funzionano", probabilmente non forniscono la semantica che il programmatore desidera. Solo ffsè forse utile.
R .. GitHub SMETTA DI AIUTARE IL GHIACCIO

4
@R .: sono utili se si dispone di codice BSD legacy da compilare che utilizza queste funzioni. ;-)
Paul R
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.