您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言bcopy()和memcpy()、bzero()和memset()、bcmp()和memcmp()几个函数的差别

时间:12-31来源:作者:点击数:

这几个函数的具体用法这里不再详细说明,仅提供粗略的解释,请点击相应的链接到函数手册查看:

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() 替代吧。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门