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
因此,初始化过程仍是建议使用循环语句来作。
相关文章
相关标签/搜索