• 转:BZERO()等的区别


    BZERO()等的区别

    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()函数代替,这样就跨平台了。哈哈... 
    实在要用就像楼上说的那样。

     

  • 相关阅读:
    MongoDB —— 第三篇 高级操作
    MongoDB —— 第七篇 运维技术
    MongoDB —— 第八篇 驱动实践
    EditPlus 使用技巧集萃(转)
    面试经验网上资源汇总
    设计模式网上资料整合理解——创建型模式(一)
    C#编写扩展存储过程
    利用VS调试脚本
    用DevExpress.XtraReports实现复杂报表套打的一些经验
    无废话.NET帮助文件生成——Sandcastle+SHFB
  • 原文地址:https://www.cnblogs.com/yfz0/p/5820730.html
Copyright © 2020-2023  润新知