string.h和strings.h之间的区别

我注意到(至less在Mac OS X上)有一个string.h头文件和一个strings.h头文件。 man 3 string显示它们包含不同的function。 这有什么理由吗?

strings.h来自unix进化中的BSD分支。 它的内容已经被POSIX标准化了,但是其中大部分都被标记为遗留,并且可以很容易地被其他function所取代:

 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函数。 为了获得最大的可移植性,你应该只使用<string.h>但是如果你需要<strings.h>的函数比需要更多的可移植性,那么你可以使用<strings.h>而不是<string.h>