我注意到(至少在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>
.