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) |
全站熱搜
留言列表