BZERO()等的區別
bzero
原型:
用法:
功能:置字節字符串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
原型:
用法:
功能:把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
原型:
用法:
功能:把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()函數代替,這樣就跨平臺了。哈哈...
實在要用就像樓上說的那樣。