memset函數及注意事項


  memset函數的原型為:void * memset(void *ptr,int value,size_t num);用於為地址ptr開始的num個字節賦值value。

  memset函數的頭文件為:C:<memory.h>或<string.h>    C++:<cstring>。

  在用memset為申請的數組賦值時,如果了解他的賦值原理,很有可能會造成一些不必要的隱形錯誤,令人頭疼不已。memset函數在為數組(單個變量也可以)賦值時,是逐個字節賦值的,ptr開始的num個字節中的每個字節都賦值為value。所以我們就要注意了:

  (1)若ptr指向的是char型地址,value可以為任意字符值。(因為一個字符占一個字節);

  (2)若ptr指向的非char型地址(即最小存儲單位不是一個字節的數據類型),如int型地址,要想賦值正確,value的值只能是-1或0,因為-1和0轉換為二進制后每一位都是一樣的,這里假設int型占四個字節,則-1=0XFFFFFFFF,0=0X00000000。

  例:正確賦值:

        int a[10];

        memset(a,-1,sizeof(a));

 

  賦值后a中元素為:0xFF 0XFF 0XFF 0XFF。因為int型占四個字節,memset的賦值方式是逐個字節進行賦值,所以元素的值實際上是四個字節合在一起的值:0XFFFFFFFF=-1。

  例:錯誤賦值:

        int a[10];

        memset(a,1,sizeof(a));

  賦值后a中元素為:0X01 0X01 0X01 0X01,即:0X01010101=16843009。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM