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函数,相比来说两个参数确实更好记忆。使用这两个函数应该是因人而异,以及不同的代码环境下选择不同的函数使用吧,之前看到网上说两个函数用法不当导致程序性能变差的问题我还没有具体实验过,这里就不做探讨了。等深入研究之后再来补充性能比较。

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182281.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Web 前端开发学习资料整理

    以前学习过一段时间的web前端开发,整理了一些我看过的/我认为比较好的学习资料(网站、书籍)。我只是闲来无事整理一下,如有不足,嘴下留情..毕竟分享不是一件坏事,共同学习…一、语言基础(以书和网站为主)1.HTML&CSS:(1)入门:Codeademy上的html&css课程——在线交互式编程平台,弄清楚基本概念和基本语法w3school上的HTML/CSS教程——

  • mac修改hosts文件_hosts文件修改权限

    mac修改hosts文件_hosts文件修改权限http://www.liubingyang.com/like/host-google-mac.html

  • deepfacelab第七步换脸失败_CUBASE AI

    deepfacelab第七步换脸失败_CUBASE AI首先需要选择合适的DeepFaceLab下载(https://www.deepfacelabs.com/list-5-1.html),然后安装相应的显卡驱动,如果已经准备好这些工作,那么恭喜你,终于开

  • 看透木马_看透别说透

    看透木马_看透别说透一、必备基础知识在介绍木马的原理之前有一些木马构成的基础知识我们要事先加以说明,因为下面有很多地方会提到这些内容。一个完整的木马系统由硬件部分、软件部分和具体连接部分组成。小知识:  “木马”全称是“特洛伊木马(TrojanHorse)”,原指古希腊士兵藏在木马内进入敌方城

    2022年10月14日
  • BatchShell软件—-Xshell与Ansible结合

    BatchShell软件—-Xshell与Ansible结合

  • 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar[通俗易懂]

    来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar[通俗易懂].TrimEnd()怀疑是否SqlBulkCopy是否存在某种bug,故而在系统中改写代码,用单个sql的插入数据方式,用循环逐条导入。结果是没问题。难道真的是SqlBulkCopy有某种bug?上网搜了一通,竟没有一条说有什么bug之类的。偶然一次发现,len函数取数据长度是去了尾部空格的。故而在代码中对用于批量导入的数据,导入前进行一次遍历,将该字段中数据用TrimEnd()去尾部空格…

发表回复

您的电子邮箱地址不会被公开。

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