Ich bemerkte, dass es (zumindest unter Mac OS X) sowohl einen <string.h>
Header als auch einen <strings.h>
Header gab. man 3 string
zeigt, dass sie unterschiedliche Funktionen enthalten. Gibt es einen Grund dafür?
Ich bemerkte, dass es (zumindest unter Mac OS X) sowohl einen <string.h>
Header als auch einen <strings.h>
Header gab. man 3 string
zeigt, dass sie unterschiedliche Funktionen enthalten. Gibt es einen Grund dafür?
Antworten:
strings.h stammt aus dem BSD-Zweig in der Unix-Evolution. Der Inhalt wurde von POSIX standardisiert, der größte Teil ist jedoch als Legacy gekennzeichnet und kann problemlos durch andere Funktionen ersetzt werden:
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);
Fügt <strings.h>
dem Standard-Header normalerweise nur einige nützliche, aber nicht standardmäßige zusätzliche Zeichenfolgenfunktionen hinzu <string.h>
. Für maximale Portabilität sollten Sie nur verwenden, <string.h>
aber wenn Sie die Funktionen in <strings.h>
mehr benötigen, als Sie Portabilität benötigen, können Sie <strings.h>
stattdessen verwenden <string.h>
.
ffs
ist möglicherweise nützlich.
strings.h
enthält OS X nicht standardmäßige Funktionenbcmp bcopy bzero ffs index rindex strcasecmp strncasecmp
… und das war's.