原文网址:http://blog.csdn.net/agathe/article/details/6066157

bzero  
原型:

extern void bzero(void *s, int n);

用法:

#include <string.h>

功能:置字节字符串s的前n个字节为零。    
说明:bzero无返回值。    
举例:       // bzero.c            
       #include <syslib.h>
       #include <string.h>
       int main()
       { 
                struct
                {
                      int a;
                      char s[5];
                      float f;
                } tt;
                char s[20];
                bzero(&tt,sizeof(tt));   // struct initialization to zero       bzero(s,20);
                clrscr();
                printf("Initail Success");
                getchar();
                return 0;
        }

======================================== 
memset  
原型:

extern void *memset(void *buffer, int c, int count);

用法:

#include <string.h>

功能:把buffer所指内存区域的前count个字节设置成字符c。    
说明:返回指向buffer的指针。    
举例:       // memset.c
       #include <syslib.h>
       #include <string.h>
       int main()
       { 
           char *s="Golden Global View";
            clrscr();
           memset(s,'G',6);
           printf("%s",s);
           getchar();
            return 0;
        }

======================================= 
setmem  
原型:

extern void setmem(void *buf, unsigned int count, char ch);          

用法:

#include <string.h>    

功能:把buf所指内存区域前count个字节设置成字符ch。    
说明:返回指向buf的指针。    
举例:       // setmem.c
       #include <syslib.h>
       #include <string.h>
       int main()
       { 
            char *s="Golden Global View";
           clrscr();
           setmem(s,6,'G');
          printf("%s",s);
            getchar();
          return 0;
        }
=======================================

综述:
bcopy和memcpy、bzero和memset、bcmp和memcmp的差别在哪里?
bcopy、bzero和bcmp是传统BSD的函数,属于POSIX标准;mem*是C90(以及C99)标准的C函数。区别在于,如果你打算把程序弄到一个符合C90/C99,但是不符合POSIX标准的平台时,后者比较有优势。

NetBSD的代码中有很多地方使用mem*(他们更偏爱mem*,以利于移植),即使内核也是如此,而FreeBSD的内核中则尽量避免使用(希望尽可能避免在内核中出现较多的C函数)。如果你提交代码的话需要注意这些约定。

在memset和bzero初始化数据间,我很多时候选择bzero, memset的一个缺点是第二个参数和第三个参数需要记忆,需要记住哪个是值和哪个是大小(如果不想查手册的话), 不可以弄错。

bzero()和memset()
今天用到一个字符数组初始化函数,bzero(),因为比较生疏,于是在查本地的一个C/C++函数库的时候并未见此函数,于是便觉得自己拥有的CHM版的库函数软件包有点山寨了,可是当自己调试程序的时候却发现此函数始终通不过编译。被逼上网查它们的区别,得答案如下:

C has memset(), the Berkeley UNIX C library has bzero(). They are not
identical, and bzero() pre dates memset() but is not widely available (since
it's not part of standard C).
     在LINUX平台上是支持bzero的,但是其并不在ANSI C中定义,也就是不属于C的库函数.

==========================================================================

From CSDN

【问】网上查了是 
#include <string.h> 
但是在vc6.0 和vs2005下还是报错,说bzero没有定义

【答】确实没有

可以自己定义一个

C/C++ code
#define bzero(a, b)             memset(a, 0, b)

bzero()是在linux平台下用的,可以用memset()函数代替,这样就跨平台了。哈哈... 
实在要用就像楼上说的那样。

【转】bzero, memset ,setmem 区别的更多相关文章

  1. bzero, memset ,setmem 区别【转】

    本文转载自:http://chang6520.blog.163.com/blog/static/112665875201302843359715/ bzero 原型: extern void bzer ...

  2. 转:BZERO()等的区别

    BZERO()等的区别 bzero  原型: extern void bzero(void *s, int n); 用法: #include <string.h> 功能:置字节字符串s的前 ...

  3. bzero()等的区别

    bzero  原型: extern void bzero(void *s, int n); 用法: #include <string.h> 功能:置字节字符串s的前n个字节为零.    说 ...

  4. ZeroMemory和memset的区别

    摘自百度百科,保存为学习使用 ZeroMemory,是美国微软公司的软件开发包SDK中的一个宏. 其作用是用0来填充一块内存区域. 声明 void ZeroMemory( PVOID Destinat ...

  5. fill与memset的区别

    fill 的头文件是<iostream> 命名空间是std: 在memset(a,0(-1),sizeof(a))全部初值定为0或-1时两者是没有多大区别; 但是在初值为其他值得时候就不同 ...

  6. strcpy、memcpy和memset的区别

    strcpy 原型:extern char *strcpy(char *dest,char *src); 用法:#include <string.h> 功能:把src所指由NULL结束的字 ...

  7. fill和memset的区别

    https://blog.csdn.net/xs18952904/article/details/75195412 memset只能初始化成为0或者-1,其他都要用fill来完成. #include& ...

  8. fill,fill-n,memset的区别

    这里在网上搜集归纳了一个总结 memset函数 按照字节填充某字符 在头文件<string.h>中 因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为 ...

  9. bzero 字符数组清零

    原来bzero()是这个功能,学习啦.下面的文章可以好好参考,出处:http://hi.baidu.com/wg_wang/item/5fa42c15c73b8efa9c778af8 bzero &a ...

随机推荐

  1. HBase保存的各个字段意义解释

    /×××××××××××××××××××××××××××××××××××××××××/ Author:xxx0624 HomePage:http://www.cnblogs.com/xxx0624/ ...

  2. 关于yum仓库的中的软件包下载

    在Linux系统下,很多软件的安装我们都会选择使用yum的方式安装,因为简单方便,易于管理. 有时我们可能会有这样的一个需求:即喜欢上yum仓库中的一个软件了,想要下载到本地.该怎么办呢? 实现方法不 ...

  3. QT+VS编译器处理字符串时的坑真是多

    以下因素都有影响:1. QT4与QT5对字符串编码的处理不同(最好不要在源代码里直接写中文,坑更多)2. QTextCodec自动对编码转换的影响3. 源代码文件对编码存储格式的不同会影响编译器对字符 ...

  4. iOS CoreMotion框架(传感器)

    我们知道iOS的应用真的太多了,很多应用让我们惊叹不已!!!很多意想不到的应用! 比如: 1.电子罗盘指南针之类的应用-让我们知道方向. 2.运动类型软件-让我们知道我们跑步多少公里. 3.社交软件中 ...

  5. lua 的 WriteFile 和 ReadFile

    lua 的 ReadFile 和 WriteFile 注意: lua 代码中的 string 可以包含二进制数据 string.len(str) 不会被 '\0' 截断 从 lua 传入 c 时: 需 ...

  6. TCP建立连接的三次握手过程

    TCP是因特网中的传输层协议,使用三次握手协议建立连接,下面是TCP建立连接的全过程. 上图画出了TCP建立连接的过程.假定主机A运行的是TCP客户程序,B运行的是TCP服务器程序.最初两端的TCP进 ...

  7. CentOS中通过stat查看文件的元数据

    CentOS中可以通过stat查看文件的元数据 [baby@xiaoxiao abc]$ stat honey  File: `honey'  Size: 25         Blocks: 8   ...

  8. Hadoop HDFS文件常用操作及注意事项

    Hadoop HDFS文件常用操作及注意事项 1.Copy a file from the local file system to HDFS The srcFile variable needs t ...

  9. ubuntu12.10升级至14.04

    之前执行apt-get 不管是什么软件或apt-get update都会遇到fail to fetch http://us.archive.ubuntu.com quantal-updates/mai ...

  10. 基于web工作流开发

    目前在研发基于web工作流的开发 什么是工作流? 工作流简言之就是: 1.反应业务流程的计算机化的模型. 2.一类能够完全或者部分自动执行的经营过程:(为了提高效率,实现自动化). 3.任务.活动及活 ...