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()函數代替,這樣就跨平臺了。哈哈... 實在要用就像樓上說的那樣。

相關文章
相關標籤/搜索