memset 函數是內存賦值函數,用來給某一塊內存空間進行賦值的。 其原型是:void* memset(void *_Dst, int _Val, size_t _Size)
_Dst是目標起始地址,_Val是要賦的值,_Size是要賦值的字節數。
例1:
char str[9];
我們用memset給str初始化為“00000000”,用法如下
memset(str,0,8);
注意,memset是逐字節 拷貝的。
例2:
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