2022年6月20日星期一

C memset

 void *memset(void *, int, size_t);

用某種位元組內容覆寫一段連續記憶體空間(維基百科說明)

memset(記憶體空間,填入數值,幾個);

遙想當年剛接觸C語言的時候,如果知道這個函式就不會傻傻地用For 迴圈把陣列資料還原了,話不多說,我們直接看下面程式碼,讓你快速明白兩者間的差異。

新手程式碼

  1. /*This file use to record string.h library*/
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. #define ArraySize 10
  6. int main()
  7. {
  8. int NumArray[ArraySize]={0,1,2,3,4,5,6,7,8,9};
  9. int i = 0;
  10.  
  11. printf("Array value\n");
  12.  
  13. for(i = 0;i<ArraySize;i++)
  14. printf("NumArray[%d]:%d\n",i,NumArray[i]);
  15.  
  16. printf("Clear Array\n");
  17.  
  18. for(i = 0;i<ArraySize;i++)
  19. NumArray[i] = 0;
  20.  
  21. printf("After Clear Array\n");
  22.  
  23. for(i = 0;i<ArraySize;i++)
  24. printf("NumArray[%d]:%d\n",i,NumArray[i]);
  25. return 0;
  26. }

有經驗者的程式碼

  1. /*This file use to record string.h library*/
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. #define ArraySize 10
  6. int main()
  7. {
  8. int NumArray[ArraySize]={0,1,2,3,4,5,6,7,8,9};
  9. int i = 0;
  10.  
  11. printf("Array value\n");
  12.  
  13. for(i = 0;i<ArraySize;i++)
  14. printf("NumArray[%d]:%d\n",i,NumArray[i]);
  15.  
  16. printf("Clear Array\n");
  17.  
  18. memset(NumArray,0,sizeof(NumArray));
  19.  
  20. printf("After Clear Array\n");
  21.  
  22. for(i = 0;i<ArraySize;i++)
  23. printf("NumArray[%d]:%d\n",i,NumArray[i]);
  24. return 0;
  25. }

為甚麼用memset呢?主要是方便快速,再者,以後如果使用struct時綁定多個資料型態或是陣列時,可以快速初始化或是清除資料

參考資料


沒有留言:

發佈留言

打賞按讚