bzero和memset函数
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函数,相比来说两个参数确实更好记忆。使用这两个函数应该是因人而异,以及不同的代码环境下选择不同的函数使用吧,之前看到网上说两个函数用法不当导致程序性能变差的问题我还没有具体实验过,这里就不做探讨了。等深入研究之后再来补充性能比较。
bzero和memset函数相关推荐
- bzero和memset函数区别联系
bzero函数 函数原型:void bzero(void *s, int n): 头文件:#include <string.h> 功能:将字符串s的前n个字节置为0,一般来说n通常取siz ...
- bzero()与 memset()等的区别
BZERO()等的区别 bzero 原型: extern void bzero(void *s, int n); 用法: #include <string.h> 功能:置字节字符串s ...
- bzero与memset
bzero: 原型:void bzero(void *s, int n); 功能:置字节字符串s的前n个字节为零且包括'\0'. 说明:bzero无返回值,并且使用strings.h头文件,strin ...
- bzero 和memset的区别
bzero 原型:extern void bzero(void *s, int n); 用法:#include <string.h> 功能:置字节字符串s的前n个字节为零且包括'\0'. ...
- C:bzero与memset
目录 1.bzero 2.memset 3.实例 1.bzero bzero函数声明如下: /* Set N bytes of S to 0. */ extern void bzero (void * ...
- memset()函数用法及其作用
memset()函数原型是: extern void *memset(void *buffer, int c, int count) //buffer:为指针或是数组, //c:是赋给buffer的值 ...
- memset函数详细说明
1.void *memset(void *s,int c,size_t n) 总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c. 2.例子 #include <stdio.h> ...
- memset函数使用详解
1.void *memset(void *s,int c,size_t n) 总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c. 2.例子 #include void main(){ c ...
- 【转】C语言的memset函数
http://vip.6to23.com/tenax/clib/string/memset.htmlhttp://hi.baidu.com/longchengjiang/blog/item/32c0e ...
- C/C++中memset()函数
函数介绍 memset()函数的作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作. void *memset(void *s, int ch, size_t n) ...
最新文章
- mac安装mysql8.0.11_【MySQL】Mac安装MySQL(V8.0.15)蹚坑记录
- windows的ftp命令小结
- 不是每一个缺钱的人都能贷款!
- 饿了吗商品列表_仅仅一字之差,饿了么起诉饿了吗
- JSON.toJSONString 首字母不小写
- The request was rejected by the HTTP filter
- 【论文阅读】xgboost
- 如何生成一个QRCode(二维码)
- 寻找隐藏在CloudFlare和Tor后的真实IP
- 幽灵蛛(pholcus)(五)--json解析学习资料
- 养成不断学习的好习惯_如何使用“小习惯”养成一致的学习习惯。
- 论文阅读(3):Image-Based 3D Object Reconstruction:State-of-the-Art and Trends in the Deep Learning Era
- 杭电计算机研究生复试,杭电计算机考研经验
- JavaSSM笔记(二)SpringMvc基础
- 给你心爱的 npm 包上个『北京户口』
- Windows批处理修改文件名拼接日期
- Python必学模块之CSV模块
- 距离保护整定计算中分支系数公式理解
- rndis模块 linux,openwrt 19.7 驱动添加rndis模式4G模块
- 学术生涯中曾经的小目标