memset庫函數

頭文件:#include <string.h>
 
定義函數:void * memset(void *s, int c, size_t n);
 
函數說明:memset()會將參數s 所指的內存區域前n 個字節以參數c 填入,而後返回指向s 的指針。在編寫程序時,若須要將某一數組做初始化,memset()會至關方便。
 
返回值:返回指向s 的指針。
 
附加說明:參數 c 雖聲明爲int,但必須是unsigned char,因此範圍在0 到255 之間。
 
經常使用內存空間的初始化。
一、初始化字符數組(經常使用)
#include <stdio.h>
#include <string.h>
int main(void)
{
    char s[5];
    memset(s,'A',sizeof(s));
    s[5]='\0';
    puts(s);
    return 0;
}

二、初始化數組(注意:初始化爲0正確實現,其餘初始值仍是經過循環語句實現)數組

#include <stdio.h>
#include <string.h>
int main(void)
{
    int i,array1[5],array2[5];
    memset(array1,0,sizeof(array1));
    for(i=0; i<5; ++i)
        printf("%d ",array1[i]);
 
    printf("\n");
 
    memset(array2,1,sizeof(array2));
    for(i=0; i<5; ++i)
        printf("%d ",array2[i]);
    return 0;
}

經過庫函數memset()來對一個數組進行初始化,須要瞭解一下該函數的工做原理。庫函數memset()是針對字節操做的,其中第二個參數值被賦給第一個參數指向的內存地址開始的每個字節,所以,這種初始化其實存在侷限性,也致使其主要用於清除數組內容等。好比:假設i=0,1,2,...
memset(a,0,sizeof(a));  // 此時a[i]=0x00000000
memset(a,-1,sizeof(a)); // 此時a[i]=0xffffffff
memset(a,0x0f,sizeof(a)); // 此時a[i]=0x0f0f0f0f=252645135
因爲500=0x1f4,400=0x190,所以,若是使用
memset(a,0x190,sizeof(a)); // 此時a[i]=0x90909090
因此,初始化過程仍是建議使用循環語句來作。
相關文章
相關標籤/搜索