日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

bzero, memset ,setmem 区别

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzero, memset ,setmem 区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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沒有定義

【答】確實沒有

可以自己定義一個

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

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


原文地址:http://hi.baidu.com/lovelyhuhu/item/2b202ac92838b52d47d5c051

總結

以上是生活随笔為你收集整理的bzero, memset ,setmem 区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。