Zauważyłem, że był (przynajmniej w systemie Mac OS X) zarówno <string.h>nagłówek, jak i <strings.h>nagłówek. man 3 stringujawnia, że mają one różne funkcje. Czy jest jakiś powód?
Zauważyłem, że był (przynajmniej w systemie Mac OS X) zarówno <string.h>nagłówek, jak i <strings.h>nagłówek. man 3 stringujawnia, że mają one różne funkcje. Czy jest jakiś powód?
Odpowiedzi:
strings.h pochodzi z gałęzi BSD w ewolucji unixa. Jego zawartość została ustandaryzowana przez POSIX, ale większość z nich jest oznaczona jako starsza i można ją łatwo zastąpić innymi funkcjami:
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);
Zwykle <strings.h>dodaje do standardowego nagłówka kilka przydatnych, ale niestandardowych, dodatkowych funkcji łańcuchowych <string.h>. Aby uzyskać maksymalną przenośność, powinieneś używać tylko, <string.h>ale jeśli potrzebujesz funkcji w <strings.h>więcej niż potrzebujesz, możesz użyć <strings.h>zamiast <string.h>.
ffsmoże się przydać.
strings.hzawiera niestandardowe funkcjebcmp bcopy bzero ffs index rindex strcasecmp strncasecmp… i to wszystko.