这几个函数的具体用法这里不再详细说明,仅提供粗略的解释,请点击相应的链接到函数手册查看:
bzero() 和 memset() 函数都可以用来将字符串(内存)的前 n 个字节置零;
bcmp() 和 memcmp() 函数都可以用来比较字符串(内存);
bcopy() 和 memcpy() h函数都可以用来复制字符串(内存)。
那么,bcopy()和memcpy()、bzero()和memset()、bcmp()和memcmp() 这几个函数的差别在哪里呢?
以 b* 开头的bcopy()、bzero()和bcmp()是传统BSD的函数,属于POSIX标准;以 mem* 开头的 memcpy()、memset()和memcmp() 是C90(以及C99)标准的C函数。
如果你打算把程序部署到一台符合C90/C99,但是不符合POSIX标准的机器上时,以 mem* 开头的 memcpy()、memset()和memcmp() 比较有优势。
NetBSD的代码中有很多地方使用mem*(他们更偏爱mem*,以利于移植),即使内核也是如此,而FreeBSD的内核中则尽量避免使用(希望尽可能避免在内核中出现较多的C函数)。如果你提交代码的话需要注意这些约定。
拿 memset() 和 bzero() 比较,我们更希望使用bzero(),而memset() 需要记住第二个和第三个参数,要知道哪个是大小,哪个是值,当然,不嫌麻烦的话你可以去问度娘。
注意:bzero() 不是标准函数,没有在ANSI中定义,笔者在VC6.0和MinGW5下编译没通过;据称Linux下的GCC支持,不过笔者没有亲测。鉴于此,还是使用 memcmp() 替代吧。