C语言 bzero和memset有什么区别?

 我来答
槛外人网上人生
推荐于2018-09-16 · TA获得超过6254个赞
知道大有可为答主
回答量:1710
采纳率:0%
帮助的人:549万
展开全部
bzero
  原型:extern void bzero(void *s, int n);  用法:#include <string.h>  功能:置字节字符串s的前n个字节为零且包括‘\0’。  说明:bzero无返回值,并且使用strings.h头文件,strings.h曾经是posix标准的一部分,但是在POSIX.1-2001标准里面,这些函数被标记为了遗留函数而不推荐使用。在POSIX.1-2008标准里已经没有这些函数了。推荐使用memset替代bzero。

  void *memset(void *s, int ch, size_t n);  函数解释:将s中前n个字节替换为ch并返回s;  memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。  常见的三种错误  第一: 搞反了ch 和 n的位置.  一定要记住 如果要把一个char a[20]清零, 一定是 memset(a, 0, 20)  而不是 memset(a, 20, 0)  第二: 过度使用memset, 我想这些程序员可能有某种心理阴影, 他们惧怕未经初始化的内存, 所以他们会写出这样的代码:  char buffer[20];  memset(buffer, 0, sizeof((char)*20));  strcpy(buffer, "123");  这里的memset是多余的. 因为这块内存马上就被覆盖了, 清零没有意义.  第三: 其实这个错误严格来讲不能算用错memset, 但是它经常在使用memset的场合出现

关于字符数组的初始化,在项目的压力测试中,发现性能明显下降,变怀疑在程序中的若干临时字符数组的初始化(使用bzero)身上。于是修改为首个字符置零的方式而非全部置零的方式初始化,响应得到明显的提升。原来在mp3检索的每一条结果都要进行bzero对临时数组初始化,每一个请求需要30次的bzero对临时数组的置零。于是想到了,在非必要的情况下,只对临时数组的第一个(或前几个)字符置零的初始化方式对比与使用bzero的话,能够明显提高性能。
匿名用户
2012-12-13
展开全部
bzero是清零,memset是置为指定值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kimtaijun
2012-12-13
知道答主
回答量:23
采纳率:0%
帮助的人:6万
展开全部
其实也没什么区别,参数不同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式