Mir ist aufgefallen, dass es (zumindest unter Mac OS X) sowohl a <string.h>
Kopfzeile und a <strings.h>
Header. man 3 string
zeigt, dass sie unterschiedliche Funktionen enthalten. Gibt es dafür einen Grund?
Unterschied zwischen und
icktoofay
strings.h stammt 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);
-
Einige C-Standardbibliotheken haben die nicht veralteten Funktionen von zusammengeführt
strings.h
hineinstring.h
. Siehe zB Glibc.– Entropo
28. April 2011 um 15:34 Uhr
-
Eine wichtige Funktion von strings.h, die jetzt in glibc string.h vorhanden ist, ist
explicit_bzero
. z.B github.com/bminor/glibc/blob/master/string/explicit_bzero.c– angstyloop
13. August um 22:32 Uhr
Typisch <strings.h>
fügt dem Standard-Header lediglich 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 du die funktionen brauchst <strings.h>
mehr als Sie Portabilität brauchen, dann können Sie verwenden <strings.h>
Anstatt von <string.h>
.
-
Ich würde die Beschreibung dieser Funktionen als “nützlich” in Frage stellen. Die meisten von ihnen sind hässliche BSD-Duplikate von Standard-ANSI/ISO-C-Funktionen mit unterschiedlichen Namen. Die Vergleichsfunktionen ohne Berücksichtigung der Groß-/Kleinschreibung für Byte-Strings sind (im Sinne der plattformübergreifenden Zuverlässigkeit) bei modernen UTF-8-Strings wahrscheinlich nicht nützlich, und selbst wenn sie “funktionieren”, bieten sie wahrscheinlich nicht die Semantik, die der Programmierer wünscht. Nur
ffs
ist evtl. nützlich.– R.. GitHub HÖR AUF, EIS ZU HELFEN
27. November 2010 um 14:20 Uhr
-
@R.: Sie sind nützlich, wenn Sie älteren BSD-Code kompilieren müssen, der diese Funktionen verwendet. 😉
– PaulR
27. November 2010 um 14:22 Uhr
Für das, was es wert ist, OS X
strings.h
enthält nicht standardmäßige Funktionenbcmp bcopy bzero ffs index rindex strcasecmp strncasecmp
… und das ist es.– Kartoffelklatsche
27. November 2010 um 10:28 Uhr
@Potatoswatter: Es tut genau das, was von POSIX angegeben wird.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
27. November 2010 um 14:18 Uhr