header c++ - Unterschied zwischen string.h und strings.h





funktionen download (3)


In der Regel fügt <string.h> dem Standardheader <string.h> nur einige nützliche, aber nicht standardmäßige zusätzliche Zeichenfolgenfunktionen <string.h> . Für eine maximale Portabilität sollten Sie nur <string.h> aber wenn Sie die Funktionen in <strings.h> mehr benötigen, als Sie benötigen, können Sie <string.h> anstelle von <string.h> .

Mir ist aufgefallen, 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 verschiedene Funktionen enthalten. Gibt es einen Grund dafür?




strings.h kommt aus dem BSD-Zweig der Unix-Evolution. Sein Inhalt wurde von POSIX standardisiert, aber das meiste davon ist als Legacy gekennzeichnet und kann leicht 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);



Eine andere sizeof Trap: boolesche Ausdrücke.

#include <stdio.h>
int main() {
    printf("%d\n", (int)sizeof !0);
}

Er entspricht in C der sizeof(int) , da der Ausdruck vom Typ int , in C ++ jedoch typischerweise 1 ist (obwohl dies nicht erforderlich ist). In der Praxis sind sie fast immer verschieden.





c string header