close

 

[轉載自藍森林]

問個問題大家別罵我笨

說實話我接觸c語言有段時間了
不過見識特別短,有一個很簡單問題
我們單位的技術在用字符串之前總是
memset(buffer , 0 , sizeof(buffer));這樣
當然了就是清空,
那麼我想既然能都清0,為什麼他不用
bzero(buffer , sizeof(buffer));
memset效率會比bzero高麼?????
bzero不是專門清空的麼?
哪個兄弟幫解釋一下
小弟先謝謝啦

 

bzero 的效率不會比 memset 更高。
不過少寫一個參數倒是事實。

bzero 很少有人用,主要是因為它不如 memset 的標準化程度高。
很多標準都支持 memset 的,但是 bzero 只在 BSD 的早期標準中有。

 

恩,那麼按照班長的意思說bzero是一個已經被memset淘汰的東西了?
那我看好多人些的sock程序裡邊在客戶端總有那麼一句
bzero(&server_add , sizeof(struct sockadd_in));
恩恐怕就是為了少寫幾個字吧.
另外班長說這個標準...........ANSI????
我不服和標準,就不能用對吧,也就是說
我寫memset的可移植性或許會比bzero高一些????

 

-->
是;
是。

 

我問了三個問題,班長回答2個是~~~~~
那麼就是說,其實用什麼對移植性來說都一樣啦
只不過你用bzero時候,人家說你"kao 土掉渣了"
你就說,"我比你少寫好幾個字呢!!!!"

 

-->
不知道你有沒有看到我這句?
-->

-->
奇怪了。在我引用的那個帖子裡,你的確只有兩個疑問啊!
至於你後來又修改了那個回復,那又怎麼能怪我呢?

 

習慣問題吧
我知道memset的時候還不知道bzero.
而且memset感覺用處多點.能記一個幹嘛要記兩個呀

 

恩,我後來有又了個問題,就改了一下沒問完班主就答了.

我當然看到那句話了"標準化程度"這個我理解就是memset符合更多的標準,
比如什麼iso9001~~~~~等等之類吧........
而bezro出來的比較早,新的很多的標準他都不服合所以換了新環境
別人恐怕就不能讓它出來了對麼?

我是不是曲解了這句話含義了????????

 

-->
請看man手冊:
bzero:
CONFORMING TO
4.3BSD. This function is deprecated -- use memset in new programs.

memset:
CONFORMING TO
SVID 3, BSD 4.3, ISO 9899

 

恩,手冊上寫的很清除bzero沒有memset好,那麼以後就不用bzero函數啦
感謝2位

 

memset除了可以清零之外,還可以將一塊內存設置為統一的數據
bzero只能清零

 

W.Richard Stevens的 unix網路編程一書中說:bzero不是ANSI C的函數,它起源於Berkerly 網絡編程代碼。bzero兩個參數更容易記憶;而且,memset的 後兩個參數的位置如果些錯了,編譯時也不容易查出來。

所以我認為,使用哪個函數,其實是個人風格的問題,不一定非得說 某個比另外一個更好!

 

樓主很聰明

 

-->

所以我認為如果是清零,還是用bzero好。

我再cygwin和solaris的man page沒看到說bzero deprecated呀。那位兄弟在哪裡看到的?

 

-->
Linux smb-dev 2.4.20-8bigmem #1 SMP Thu Mar 13 17:32:29 EST 2003 i686 i686 i386 GNU/Linux

 

W.RICHARD STEVENS 的網絡編程中的bzero 不是 一個宏嗎??他不就是 memset嗎

#define bzero(ptr,n) memset(ptr,0,n)
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ryan0988 的頭像
    ryan0988

    尋找最初的初衷

    ryan0988 發表在 痞客邦 留言(0) 人氣()