bzero()與 memset()等的區別

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沒有定義

【答】確實沒有 

可以自己定義一個

#define bzero(a, b)             memset(a, 0, b)

bzero()是在linux平臺下用的,可以用memset()函數代替,這樣就跨平臺了。哈哈... 
實在要用就像樓上說的那樣。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章