c/c++之memset()函數之美

memset 函數是內存賦值函數,用來給某一塊內存空間進行賦值的;

包含在<string.h>頭文件中,可以用它對一片內存空間逐字節進行初始化;

原型爲 :

void *memset(void *s, int v, size_t n);  

這裏s可以是數組名,也可以是指向某一內在空間的指針;

v爲要填充的值;

n爲要填充的字節數; 

例子:

struct data
{
char num[100];
char name[100];
int  n;
};
struct data  a, b[10];
  
memset( &a, 0, sizeof(a) ); //注意第一個參數是指針類型,a不是指針變量,要加&
memset( b, 0, sizeof(b) );  //b是數組名,就是指針類型,不需要加&

例2:

       char str[9];

       我們用memset給str初始化爲“00000000”,用法如下

       memset(str,0,8); 

注意,memset是逐字節 拷貝的。

   例3:

       int num[8];

       我們用memset給str初始化爲{1,1,1,1,1,1,1,1},

       memset(num,1,8);//這樣是不對的

     一個int是4個字節的,8個int是32個字節,所以首先要賦值的長度就不應該爲8而是32。

     因爲memset是 逐字節 拷貝,以num爲首地址的8字節空間都被賦值爲1,

     即一個int變爲0X00000001 00000001 00000001 00000001,顯然,把這個數化爲十進制不會等於1的。

 所以,在memset使用時要千萬小心,在給char以外的數組賦值時,只能初始化爲0或者-1。

  (如果用memset(a,1,20);
就是對a指向的內存的20個字節進行賦值,每個都用ASCII爲1的字符去填充,轉爲二進制後,1就是00000001,佔一個字節。一個INT元素是4字節,合一起就是1000000010000000100000001,就等於16843009,就完成了對一個INT元素的賦值了。)

#include <memory.h> //我試了一下,C語言這麼用,C++還可以用<cstring> 
#include <stdio.h>
 void main( void ) 
{ 
 char buffer[] = "This is a test of the memset function"; 
 printf( "Before: %s\n", buffer );
 memset( buffer, '*', 4 );
 printf( "After: %s\n", buffer );
 }  
輸出:  
Before: This is a test of the memset function  
After: **** is a test of the memset function  

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章