web-dev-qa-db-ja.com

string.hとstrings.hの違い

(少なくともMac OS Xでは)string.hヘッダーとstrings.hヘッダー。 man 3 stringは、それらが異なる機能を含むことを明らかにします。これには理由がありますか?

86
icktoofay

strings.hは、unixの進化におけるBSDブランチから来ています。その内容はPOSIXによって標準化されていますが、そのほとんどはレガシーとしてマークされており、他の機能に簡単に置き換えることができます。

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);
106
AProgrammer

通常、<strings.h>は、標準のヘッダー<string.h>に、便利ではあるが非標準の追加文字列関数を追加するだけです。移植性を最大限に高めるには、<string.h>のみを使用する必要がありますが、<strings.h>の関数が必要な場合に移植性が必要な場合は、<strings.h>の代わりに<string.h>を使用できます。

17
Paul R