bcopy和memcpy、bzero和memset、bcmp和memcmp的差別

bcopybzerobcmp是傳統BSD的函數,屬於POSIX標準,是在linux下的函數;mem*C90(以及C99)標準的C函數。區別在於,如果你打算把程序弄到一個符合C90/C99,但是不符合POSIX標準的平臺時,後者比較有優勢。


NetBSD
的代碼中有很多地方使用mem*(他們更偏愛mem*,以利於移植),即使內核也是如此,而FreeBSD的內核中則儘量避免使用(希望儘可能避免在內核中出現較多的C函數)。如果你提交代碼的話需要注意這些約定

memset函數

                   ——memset是對字節進行操作

 

: s所指向的某一塊內存中的每個字節的內容全部設置爲ch指定的ASCII值。即將指定的內存,以字節爲單位,置爲ch所代表的內存形式。塊的大小由第三個參數指定,這個函數通常爲新申請的內存做初始化工作。

 

: void *memset(void *s, char ch, unsigned n);

 

理:以字節爲單位複製內存的二進制形式,到指定的內存區域。

(注:第二個數字也可以是int型,然後截取該int變量的最低字節。作爲複製的二進制模板。所以第二個字節最常見的是0全部置零 -1全部置1。)

途:memset最常見的用途是對struct做初始化工作

memset(結構體的地址,0sizeof(結構體))

bzero函數

  原型:extern void bzero(void *s, int n);

  用法:#include <string.h>

  功能:將以地址s開頭的的前n個字節爲零。

  說明:bzero無返回值。bzero只能在linux下調用

 

 

同族——memcrp函數 vs strcry函數

memcpy用來做內存拷貝,你可以拿它拷貝任何數據類型的對象,可以指定拷貝的數據長度。

原型:extern void *memcpy(void *dest, void *src, unsigned int count);

功能:由src所指內存區域複製count個字節到dest所指內存區域。

說明:srcdest所指內存區域不能重疊,函數返回指向dest的指針

 

strcpy就只能拷貝字符串了,它遇到'/0'就結束拷貝

原型:extern char *strcpy(char *dest,char *src);

功能:把src所指由NULL結束的字符串複製到dest所指的數組中。

說明:srcdest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。

 

bcopy

  原型:extern void bcopy(const void *src, void *dest, int n);

  用法:#include <string.h>

  功能:將字符串src的前n個字節複製到dest

說明:bcopy不檢查字符串中的空字節NULL,函數沒有返回值。

      目標和源的位置與memcpystrcpy不同。

bcmp

  原型extern int bcmp(const void *s1, const void *s2, int n);

  用法#include <string.h>

  功能:比較字符串s1s2的前n個字節是否相等

說明:如果s1=s2n=0則返回零,否則返回非零值。bcmp不檢查NULL

memcmp

原型:extern int memcmp(void *buf1, void *buf2, unsigned int count);

用法:#include <string.h>

功能:比較內存區域buf1buf2的前count個字節。

說明:當buf1<buf2時,返回值<0

   當buf1=buf2時,返回值=0

   當buf1>buf2時,返回值>0

 

 

 

 

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