bzero, memset ,setmem 区别

bzero  
原型:extern void bzero(void *s, int n);
用法:#include <string.h>linux

    
功能:置字节字符串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  
原型:ide

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>    code


功能:把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 CSDNget

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

【答】确实没有

能够本身定义一个

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

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

相关文章
相关标签/搜索