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?
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?
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.hcontiene funzioni non standardbcmp bcopy bzero ffs index rindex strcasecmp strncasecmp... e basta.