(少なくともMac OS Xでは)string.h
ヘッダーとstrings.h
ヘッダー。 man 3 string
は、それらが異なる機能を含むことを明らかにします。これには理由がありますか?
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);
通常、<strings.h>
は、標準のヘッダー<string.h>
に、便利ではあるが非標準の追加文字列関数を追加するだけです。移植性を最大限に高めるには、<string.h>
のみを使用する必要がありますが、<strings.h>
の関数が必要な場合に移植性が必要な場合は、<strings.h>
の代わりに<string.h>
を使用できます。