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

ick*_*fay 87 c string header

我注意到,有(至少在Mac OS X)既是一个string.h标题和一个strings.h头.man 3 string揭示它们包含不同的功能.这有什么理由吗?

APr*_*mer 111

strings.h来自unix evolution中的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);
Run Code Online (Sandbox Code Playgroud)

  • 一些C标准库已将`strings.h`的非弃用函数合并到`string.h`中.参见,例如,[Glibc](http://www.gnu.org/software/libc/manual/html_mono/libc.html#String_002fArray-Comparison). (2认同)

Pau*_*l R 18

通常<strings.h>只是向标准头添加一些有用但非标准的附加字符串函数<string.h>.为了获得最大的可移植性,您应该只使用<string.h>但如果您需要的功能<strings.h>超过您需要的便携性,那么您可以使用<strings.h>而不是<string.h>.

  • @R:如果你有使用这些函数的遗留BSD代码进行编译,它们很有用.;-) (3认同)
  • 我会质疑这些功能的描述是否“有用”。它们中的大多数都是具有不同名称的标准 ANSI/ISO C 函数的难看的 BSD 副本。字节字符串的不区分大小写的比较函数(从跨平台可靠性的角度来看)可能对现代 UTF-8 字符串没有用处,即使它们“工作”,它们也可能无法提供程序员想要的语义。只有“ffs”可能有用。 (2认同)