bzero memset_arctan3分之1

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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) );

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

struct node
{
    char a;
    int str[4];
    double b;
};

对于结构体变量

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/182281.html原文链接:https://javaforall.net

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


相关推荐

  • Scrivener for Mac如何自定义快捷键

    Scrivener for Mac如何自定义快捷键Scrivenerformac是目前苹果osx平台上最优秀的写作软件,拥有简单而又独特的操作界面,提供了标注、概述、收藏保存、全屏幕编辑、快照等各种写作辅助功能,可以对文章进行大致的勾勒或者重组,并且支持用户使用关键词跟踪主题,动态联合多种场景到单个文本,从而辅助作者完成从作品构思、搜集资料、组织结构、增删修改到排版输出的整个写作流程,能够适用于博主、作家、专栏作者使用。在ScrivenerforMac中分配或更改键盘快捷键可能存在某些菜单项,您发现自己使用了很多没有键盘快捷键的菜单项,或者您

    2022年5月25日
    38
  • Shell:export命令

    Shell:export命令https://www.cnblogs.com/tinywan/p/7224011.html一、Windows环境变量  1、在Windows系统下,很多软件安装都需要配置环境变量,比如安装jdk,如果不配置环境变量,在非软件安装的目录下运行javac命令,将会报告找不到文件,类似的错误。  2、那么什么是环境变量?简单说,就是指定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件。设置变量对于一般人最实用的功能就是:不用拷贝某些dll文件到系统目录中了,而path

    2025年9月27日
    7
  • vb6: dim rs As New ADODB.Recordset 用户定义类型未定义[通俗易懂]

    vb6: dim rs As New ADODB.Recordset 用户定义类型未定义[通俗易懂]你没有启用ADODB的引用,或者加载ADODC控件,在“工程|引用”中添加“MicrosoftActiveXDataObject[版本号,比如2.8等]Library”就可以了[用户定义类型未定义]

    2022年7月15日
    15
  • 左连接,右连接,内连接,全连接的区别及使用方式_外连接与内连接的区别

    左连接,右连接,内连接,全连接的区别及使用方式_外连接与内连接的区别左连接,右连接,内连接,全连接的区别及使用众所周知,我们在写sql时经常会用到多表查询数据,这就是涉及到连接的问题包括,左连接,右连接,内连接,全外连接。定义:左连接(leftjoin):返回包括左表的所有记录和右表中连接字段相等的记录右连接(rightjoin):返回包括右表的所有记录和左表中连接字段相等的记录等值连接或者叫内连接(innerjoin):只返回两表相连相等的行全外连接(fulljoin):返回左右表中所有的记录和左右表中连接字段相等的记录。只说概念还不够清晰举个例子

    2025年12月4日
    7
  • centos7.6安装docker_docker自动部署多环境

    centos7.6安装docker_docker自动部署多环境前言前面一篇学了mac安装docker,这篇来学习在linux上安装docker环境准备Docker支持以下的CentOS版本,目前,CentOS仅发行版本中的内核支持Docker。Doc

    2022年7月30日
    7
  • goland激活码20213月最新在线激活

    goland激活码20213月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    65

发表回复

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

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