bzero memset_memset是什么函数

bzero memset_memset是什么函数 bzero函数函数原型:voidbzero(void*s,intn);头文件:#include<string.h>功能:将字符串s的前n个字节置为0,一般来说n通常取sizeof(s),将整块空间清零。返回值:无返回值例子:将一个数组清零:charstr[10];bzero(str,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

bzero函数

函数原型:void bzero(void *s, int n);

头文件:#include <string.h>

功能:将字符串s的前n个字节置为0,一般来说n通常取sizeof(s),将整块空间清零。

返回值:无返回值

例子:

将一个数组清零:

char str[10];

bzero( str, sizeof(str) );

也可以将一个结构体清零:


   
   
   
  1. struct node
  2. {
  3. char a;
  4. int str[ 4];
  5. double b;
  6. };

对于结构体变量

struct node Test;

用bzero将其清零

bzero( &Test, sizeof(Test) );

memset函数

函数原型:void *memset(void *s,int c,size_t n);

头文件:#include <string.h> 或者#include <memory.h>

说明:将s中前n个字节替换为c并返回s

作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法

这里我们看到c是int类型的,需要注意两点:

1)若s指向的地址是char类型的,c的值可以是任意字符值;

2)若s指向的地址不是char类型,c的值只能是-1或者0。

因为-1和0转化成二进制后每一位都是一样的,设int型占4个字节,则-1=0XFFFFFFFF, 0=0X00000000。

例子:

同上将str清零:

memset( str,0,sizeof(str) );

将上面的Test变量清零:

memset( &Test,0,sizeof(Test) );

两个函数的使用进行分析:

      之前在很多地方看到说推荐用memset函数代替bzero函数,原因是在POSIX.1-2001标准里面,该函数已经被标记为了遗留函数而不推荐使用,前几天我在UNIX网络编程卷一当中看到作者说整本书都用bzero函数代替memset函数,作者是这样解释的:

     bzero不是一个ANSI C函数,它起源于早期的Berkeley网络编程代码。不过我们在整本书中使用它而不使用ANSI C的memset函数,因为bzero(带2个参数)比memset(带3个参数)更好记忆。

       并给出理由:在TCPv3艺术首次印刷时,作者在10处出现memset函数的地方犯了错,互换了第二个和第三个参数。C编译器并不能发现这个问题,因为这两个参数的类型是相同的(size_t通常定义为unsigned int类型),然而bzero函数却不会出现这个问题。

       看了两种不同的推荐,我的态度是这样的:这两个函数使用最多的就是用他们来清零,我也经常使用bzero函数而非memset函数,相比来说两个参数确实更好记忆。使用这两个函数应该是因人而异,以及不同的代码环境下选择不同的函数使用吧,之前看到网上说两个函数用法不当导致程序性能变差的问题我还没有具体实验过,这里就不做探讨了。等深入研究之后再来补充性能比较。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182585.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网站访问不了

    网站访问不了

    2021年11月3日
    53
  • 现代语音信号处理笔记 (一)

    现代语音信号处理笔记 (一)本系列笔记对胡航老师的现代语音信号处理这本书的语音处理部分进行总结,包含语音信号处理基础、语音信号分析、语音编码三部分。一开始以为三部分总结到一篇文章里就可以了,但写着写着发现事情并没有那么简单。。。因此还是老老实实的总结吧,扎实的基础最重要。语音信号处理基础语音信号的处理简称语音处理,是用数字信号处理技术对语音信号进行处理的一门学科。语音信号均采用数字方式进行处理,语音信号的数字…

    2022年5月26日
    43
  • python学习——pandas查看数据集null值:isnull

    python学习——pandas查看数据集null值:isnull在数据集中,可能有些字段下会有null值,我们在进行数据处理的时候,不能视而不见,可以使用isnull查看是否有空值In:all_dummy_df.isnull().sum().sort_values(ascending=False).head(10)Out:LotFrontage486GarageYrBlt159MasVnrArea23…

    2022年10月20日
    5
  • Alex 的 Hadoop 菜鸟教程: 第9课 zookeeper 介绍和使用

    Alex 的 Hadoop 菜鸟教程: 第9课 zookeeper 介绍和使用看了之前的教程,会发现多处出现zookeeper,比如hadoop的autofailover得用zookeeper,Hbase的RegionServer也得用zookeeper。其实不止hadoop,包括现在小有名气的Storm用的也是zookeeper。那么zookeeper究竟是做什么用的?

    2022年5月31日
    39
  • mybaties 错误[通俗易懂]

    mybaties 错误[通俗易懂]先看下错误org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):com.sinofaith.idaplus.goodsitem.mapping.GoodslowInfoPOMapper.selectByPrimaryKeyatorg.apache.ibatis.bindin

    2025年6月1日
    3
  • hough变换检测圆原理(定位变换后的面如何变成实体)

    Hough变换基本原理Hough变换是由PaulHough于1962年提出的一种检测圆的算法,它的基本思想是将图像从原图像空间变换到参数空间,在参数空间中,使用大多数边界点都满足的某种参数形式作为图像中的曲线的描述,它通过设置累加器对参数进行累积,其峰值对应的点就是所需要的信息。Hough变换最大的优点是对噪声不敏感。对于满足直线方程y=ax+b的某一个点(x0,y0),对应于参数平…

    2022年4月10日
    144

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号