回覆列表
  • 1 # 使用者928021938244

      ZeroMemory用0來填充一塊記憶體區域,原型為:

      void ZeroMemory([in] PVOID Destination,[in] SIZE_T Length);

      函式memset, wmemset或者memset給字串設定緩衝,原型為:

      void memset( void *dest, int c, size_t count );

      wchar_t memset(wchar_t *dest,wchar_t c,size_t count);

      翻看SDK,找到標頭檔案宏ZeroMemory的定義4 x;

      #define ZeroMemory RtlZeroMemory

      #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))

      從上可以看出ZeroMemory是呼叫memset來實現的。

      Raymond Chen在文章中寫道,用ZeroMemory比“= {0}” 這樣的語法更清晰,而且用後者不是所有人可以馬上明白。

      Richard Stevens在《UNIX網路程式設計》中寫道,memset有個潛在的危險,它的後兩個引數型別相同,但是含義大相徑庭,如果不慎寫反了編譯時也不容易查出來;相比起源於Berkerly網路程式設計程式碼早期的bezro不是ANSIC函式,但它的兩個引數更容易記憶。

      為什麼Microsoft code sample傾向使用ZeroMemory而不是{0}? 中寫道,在windows平臺下,對於陣列或純結構使用ZeroMemory是安全的,對於類,則使用建構函式,不要呼叫ZeroMemory。

      如果要呼叫ZeroMemory,則只是需要加入

      #define _M_AXP64 //在標頭檔案裡定義該宏

      #include

      ZeroMemory與memset區別

      ZeroMemory是微軟的SDK提供的,memset屬於C Run-time Library,所以ZeroMemory只能用於Windows系統,memset可用於別的系統。

      ZeroMemory是一個宏,只是用於把一段記憶體的內容置零,內部是用memset實現的,memset可將記憶體置成別的字元。

      如果你的程式是Win32程式而且不想連線c執行時庫,那就用ZeroMemory,如果需要跨平臺,那就用memset。

  • 中秋節和大豐收的關聯?
  • 一家人團年你最愛吃的那道菜是什麼?