Ho notato che c'erano (almeno su Mac OS X) sia <string.h>
un'intestazione che <strings.h>
un'intestazione. man 3 string
rivela che contengono funzioni diverse. c'è qualche ragione per questo?
Ho notato che c'erano (almeno su Mac OS X) sia <string.h>
un'intestazione che <strings.h>
un'intestazione. man 3 string
rivela che contengono funzioni diverse. c'è qualche ragione per questo?
Risposte:
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);
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>
.
ffs
è forse utile.
strings.h
contiene funzioni non standardbcmp bcopy bzero ffs index rindex strcasecmp strncasecmp
... e basta.